我在使用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);
我没有看到什么是错的,它看起来像我在网络上发现的许多其他代码片段。
有什么想法吗? 提前谢谢!
答案 0 :(得分:0)
DllImport声明中的StringBuilder Str
对我来说很奇怪。我建议尝试使它成为一个简单的'string
。
答案 1 :(得分:0)
是的,字符串生成器看起来很奇怪。也许char [] ??? 您还应该检查实际上是否不是那些。
如果这些东西(当你应该使用int时使用int,让我们说)在C ++中没有问题,但会在.net 2中引发异常
答案 2 :(得分:0)
也许可以尝试使用out StringBuilder Str
或out string Str
答案 3 :(得分:0)
尝试将StringBuilder
参数设为byte[]
并使用
Encoding.UTF8.GetBytes("yourstring")