2013-10-16 19 views
0

這是我的C++非託管dll代碼。爲什麼ByRef在傳遞給非託管代碼時出現異常?

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

.def文件用於導出符號。

我只用功能在VB.Net應用程序如下,

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

很難看出它如何可靠地工作。 'StringBuilder'類怎麼可能知道C++函數需要多少存儲? –

+0

@JonathanPotter應該怎樣解決這個問題?以及如何刪除ByRef使其工作? –

回答

2

它必須是ByVal。該功能不會覆蓋對StringBuilder本身的引用。它將更新StringBuilder的內容。 (對於類似的問題,請參見here。)

相關問題