c#中调用其它语言的库总结
c/c++:
- 1.标准c类库
标准c类库是按照C标准规范实现的一个C动态链接库
这种可以使用以下方法进行导入使用:
[DllImport("yourDll.dll", EntryPoint = "GetValue")]
public static extern bool GetValue(ref byte P1, ref byte P2, ref byte P3);
参数中带指针的:
[DllImport("yourDll.dll"]
Private static extern int GetValue([MarshalAs(UnmanagedType.LPArray)]byte[] pValue);
- 2.非标准c类库
这种类库一般情况下需要封装成c类库后调用,但也有人会将这种库封装成com组件进行使用
python:
- 1.python脚本中不包含第三方模块
NuGet 安装IronPython或引入IronPython.dll和Microsoft.Scripting.dll
ScriptEngine pyEngine = Python.CreateEngine();//创建Python解释器对象
dynamic py = pyEngine.ExecuteFile(@"test.py");//读取脚本文件
再利用脚本对象调用脚本中的函数
- 2.python脚本中包含第三方模块
使用Process启动python脚本进程,进行调用,当程序调用rsa加密等的时候要修改sys.path
java:
安装IKVM.NET并将其加入环境变量
NuGet安装IKVM或引用IKVM.OpenJDK.Core.dll,IKVM.Runtime.dll,IKVM.Runtime.JNI.dll和IKVM.OpenJDK.ClassLibrary.dll
对其转成dll
ikvmc commons-httpclient-3.1.jar -r:commons-logging-1.1.3.dll -r:commons-codec-1.6.dll
然后在c#程序里调用
Go:
golang类库一般用TDM-gcc编译成类库进行调用
go build -buildmode=c-shared -o yourdll.dll
vb:
封装成com组件调用
javascript:
执行ExecuteScript js代表从文件读取上来的javascript字符串funcName函数名, argument参数
object o = ExecuteScript(string.Format("{0}('{1}')", funcName, argument), js);
/// <summary>
/// 执行JS
/// </summary>
/// <param name="sExpression">参数体</param>
/// <param name="sCode">JavaScript代码的字符串</param>
/// <returns></returns>
private object ExecuteScript(string sExpression, string sCode)
{
MSScriptControl.ScriptControl scriptControl = new MSScriptControl.ScriptControl();
scriptControl.UseSafeSubset = true;
scriptControl.Language = "JScript";
scriptControl.AddCode(sCode);
try
{
return scriptControl.Eval(sExpression);
}
catch (Exception ex)
{ }
return null;
}
Ruby:
通过NuGet安装IronRuby进行调用或引入Microsoft.Scripting.dll 和Ruby.dll进行调用
ScriptModule module = ScriptDomainManager.CurrentManager.CreateModule("yourruby");
module.SetVariable("test", "this is a test");
RubyEngine.CurrentEngine.Execute("puts test", module);
R:
通过引入RDotNet.dll和RDotNet.Native.dll来进行调用