为什么ByRef在传递给非托管代码时会出现异常?

时间:2013-10-16 10:14:36

标签: c++ .net vb.net interop unmanaged

这是我的C ++非托管DLL代码。

void Only(char *a)
{
    *a++ = 'p';
    *a++ = 'r';
    *a++ = 'a';
    *a++ = 'n';
    *a++ = 'i';
    *a++ = 0;
}

.def文件用于导出符号。

我在VB.Net应用程序中使用了Only函数,如下所示,

Declare Sub Only Lib "dllproj2.dll" Alias "Only" (b As StringBuilder)
....
Dim s As StringBuilder = New StringBuilder()
Only(s)

工作正常。但是当我尝试使用b作为ByRef时,如下所示,

Declare Sub Only Lib "dllproj2.dll" Alias "Only" (ByRef b As StringBuilder)

它给出了图像中显示的异常。

enter image description here

我不明白为什么。 ByRef在这里不合适吗?

感谢。

1 个答案:

答案 0 :(得分:2)

必须是ByVal。该函数不会覆盖对StringBuilder本身的引用。它宁愿更新StringBuilder的内容。 (有关类似问题,请参阅here。)