0

这是我的 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)

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

在此处输入图像描述

我不懂为什么。ByRef 在这里不是更合适吗?

谢谢。

4

1 回答 1

2

一定是ByVal。该函数不会覆盖对StringBuilder自身的引用。它宁愿更新StringBuilder. (有关类似问题,请参见此处。)

于 2013-10-16T10:40:35.443 回答