我正在使用包含带有此签名的方法的C ++ dll:
int GetEnumerationString(int type, int value, const char** s ); /* ALLOCATES */
如标题注释中所述,该方法分配指针。我在C#中尝试了以下签名:
[DllImport("thedll.dll", EntryPoint="GetEnumerationString")]
private static extern int GetEnumerationString(int type, int value, ref string s );
但是当我运行我的程序时,我得到一个AccessViolationException
。
该方法的正确签名是什么?
答案 0 :(得分:1)
如果非托管函数分配缓冲区,它必须使用CLR分配器,以便CLR获取内存并在需要时释放它。
如果无法做到,则必须返回一个指针:
[DllImport("thedll.dll", EntryPoint="GetEnumerationString")]
private static extern int GetEnumerationString(int type, int value, out IntPtr s);
然后手动figure a string out of it并将指向的内存处置(你必须知道分配器是什么)。