今天偶然发现,现在已经有了扩展可以让C#的dll直接被native的程序加载进来的办法,以前完全不知道: (
首先创建一个.net类库工程 ,然后要安装一个程序包,在Nuget中搜索“Unmanaged Exports”即可。
代码如下
using RGiesecke.DllExport; namespace WTF { public class Wtf { [DllExport("GetWtfString", CallingConvention = System.Runtime.InteropServices.CallingConvention.StdCall)] public static string JokeMe() { return "A Message from .net DLL."; } } } |
编译时请选择x86 cpu。
结果编译的时候报了错:
error : syntax error at token '{' in: {
几经周折,发现原来是这个拓展不支持中文系统的unicode导致的,解决办法比较粗暴,在控制面板区域和语言中,在管理选项卡下面找到非unicode程序的语言下拉框,改选英文后,重启,即可编译。
之后我们随便用C++或者易语言等非托管代码去LoadLibrary试试。
可见,已经成功被调用,而我们的测试程序中,整个CLR也被加载了进去 = = 倒是很方便嘛…