原文:c#调用c++开发的dll const char* 返回值接收问题
用c#调用视频接口相关的dll,dll使用c++开发。
c++接口定义如下:
PLATFORM const char* Plat_GetValueStr(const char* propertyName, int iUserHandle);
c#接口定义如下:
[DllImport(@"Platform.dll", EntryPoint = "Plat_GetValueStr", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
extern static IntPtr Plat_GetValueStr(string propertyName, int iUserHandle);
遇到的问题及解决方法:
1、在c#调用时一开始 CharSet = CharSet.Ansi 没有定义 出现过乱码。c++中的编码为ansi,c#默认可能是Unicode。这里需要注意一下。
2、对于c++ 返回值类型为 const char* 我一开始用String 接收,在framework4.0下也成功过,但有时成功,有时失败。在framework2.0下,从来没成功过。后来改用指针接收,成功接收了。
IntPtr ipName = Plat_GetValueStr(ConstControlUnit.ControlUnitName, iUserHandle);
ResName= Marshal.PtrToStringAnsi(ipName);