C#调用非托管DLL的APIs

心得:

1. int类型没有问题,其他object类型,比如string,有不少调用问题。比如返回值只能是int或者void

2. 注意encode的问题,char,wchar_t。建议使用wchar_t,要不中文有问题。因为在c#中默认都是unicode

3. 字符串函数使用方法:

c++dll中:

extern "C" __declspec(dllexport) void __stdcall Test(wchar_t * strInput, wchar_t * strOutput)

c#使用:

[DllImport("XXX.dll", EntryPoint = "Test", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall)]
public static extern string Test(string strInput, StringBuilder strOutput);

其中,strInput是输入值,strOutput是返回值。

建议将c++dll拷贝到windows目录,方便调用。

StringBuilder要预先分配好足够的内存,要不会报错。所以在c++函数中要控制输出字符串长度。