0

我正在使用包含具有此签名的方法的 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.

该方法的正确签名是什么?

4

1 回答 1

1

如果非托管函数分配缓冲区,它必须使用 CLR 分配器,以便 CLR 获取内存并在需要时释放它。

如果这不可能,则必须返回一个指针:

[DllImport("thedll.dll", EntryPoint="GetEnumerationString")]
private static extern int GetEnumerationString(int type, int value, out IntPtr s);

然后手动从中找出一个字符串并处理指向的内存(您必须知道分配器是什么)。

于 2012-07-25T09:08:58.203 回答