为什么要在C#中调用C++的代码呢?比如我有一个C#项目要实现某种功能,同时我恰好有一个已经实现了这个功能的C++代码。我可以用C#重写一遍,当然如果工程比较大的话,用DllImport来调用C++的dll是一个更好的选择。
由于C++dll是非托管代码,我不能直接在C#工程中添加引用(会出错误提示)。命名空间System.Runtime.InteropServices提供了DllImport Attribute来动态加载非托管dll。
示例一:
C#
[DllImport("D:/UnitySocket.dll", EntryPoint="Unity_Connect")]
public static extern bool Unity_Connect(string ip, string port);
C++
extern C {
public XXX(类似FAR的一个声明值,忘了明天补上) bool Unity_Connect(string ip, string port);
}
将以上的函数声明放入一个类中,然后就可以用 类名.Unity_Connect("xxxx", "xx")来调用了。
关于C#与C++内置类型的对照,我的C++分类里的某篇文章中有详细说明(当然,是转帖,(*^__^*) 嘻嘻……)。
至于自定义类型,我目前只接触到struct类型的转换。也就是在C#中新定义一个struct,逐个字段的类型和大小都要与C++中定义的struct一致。还是