c#中编组char *的问题

时间:2010-04-24 17:45:58

标签: c# dll marshalling

我在使用c#

中的c ++ DLL调用此函数时遇到问题
INT32 WINAPI PM_COM_GetText(INT32 TextId, char* pBuf, INT32 BufSize);

它在给定文本ID的缓冲区中写入文本。 我尝试使用以下c#代码调用它,但我经常遇到访问冲突,并且不会动摇,为什么:

public string GetText(Int32 TextId)
{
  Int32 BufSize = 256;
  StringBuilder Str = new StringBuilder(BufSize);
  PM_COM_GetText(TextId, Str, BufSize);
  return Str.ToString();
}

[DllImport("ComDll.dll", CharSet = CharSet.Ansi)]
private static extern Int32 PM_COM_GetText(Int32 TextId, StringBuilder Str, Int32 BufSize);

我没有看到什么是错的,它看起来像我在网络上发现的许多其他代码片段。

有什么想法吗? 提前谢谢!

4 个答案:

答案 0 :(得分:0)

DllImport声明中的StringBuilder Str对我来说很奇怪。我建议尝试使它成为一个简单的'string

答案 1 :(得分:0)

是的,字符串生成器看起来很奇怪。也许char [] ??? 您还应该检查实际上是否不是那些。

如果这些东西(当你应该使用int时使用int,让我们说)在C ++中没有问题,但会在.net 2中引发异常

答案 2 :(得分:0)

也许可以尝试使用out StringBuilder Strout string Str

答案 3 :(得分:0)

尝试将StringBuilder参数设为byte[]并使用

Encoding.UTF8.GetBytes("yourstring")