2015-10-21 37 views
-1

我想從一個非託管的C代碼發送一個字符串到託管的VB .Net,它運行在運行Linux和mono的Raspberry pi上。我通過從C++調用動態C庫來調試netbeans中的Dynamic C庫(.so)。這工作起來就像一個魅力,但是當我使用Mono在Linux中運行VB .Net時調用相同的函數時,它將返回一個空字符串。從本機C動態庫(.so)向Mono Linux中的VB.net發送字符串

下面的代碼

C 
void HelloCstr(/*OUT*/ char* hello) 
{ 
    string s = ("Hello World"); 
    strcpy(hello, s.c_str()); 
} 

_

C++ 
std::string ss; 
HelloCstr((char*)ss.c_str()); // ss is filled with "Hello World" 

_

VB .Net 

<DllImport("libDllTest", CharSet:=CharSet.Ansi)> 
Public Shared Sub HelloCstr(str As System.Text.StringBuilder) 
End Sub 


Public Shared Function HelloWorld() As String 
    Dim sb As System.Text.StringBuilder = New System.Text.StringBuilder(200) 
    HelloCstr(sb) //After this call sb.Length == 0 
    Return sb.ToString() // this returns an empty string 
End Function 

我在做什麼錯?

回答

0

經過數小時的調試,我意識到我沒有以正確的方式將.so庫添加到Linux。上面的代碼有效。我希望這會對某人有所幫助..

相關問題