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 に答える