用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);
