非托管的程序加载托管的.net dll并运行

今天偶然发现,现在已经有了扩展可以让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也被加载了进去 = = 倒是很方便嘛…

发表评论

邮箱地址不会被公开。 必填项已用*标注