2013-11-25 68 views
1

我想用C#調用C++ dll文件來獲取數據。如何在C#中處理char **

在C++中,

extern "C" int _DLLExport Process_Read(char **msg); 

在C#,

[DllImport("ProcessExport")] 
public static extern int Process_Read(ref string msg); 

=================

string msg; 
int msg_len = 0; 
msg_len = Process_Read(ref msg); 

=================

如何顯示msg數據? 謝謝。

+4

不確定你的意思是'show data' - 在你調用'Process_Read(..)'之後,你有沒有試過'Console.WriteLine(msg)'*? –

回答

2

DllImport只能用於導入C函數,而不是C++類方法(即使它們是靜態的)。

如果你使用regsvr32註冊C++ com對象,你可以在visual studio com引用標籤中添加對dll的引用,通常visual studio會創建一個dll(我認爲它叫做運行時可調用的包裝器),你可以請參閱使用nameoflibrary.interop.dll創建。所以MyExecRefsDll.dll如果是com對象就會變成MyExexRefs.Interop.dll。但是,當您添加參考時,Visual Studio通常會自動在託管代碼中爲您執行此操作。如果你通過在C++中使用atl模板創建一個C++ dll作爲com對象,那麼從dotnet訪問就更容易了(Iam從引用另一個dll文件的dll引用非託管C++代碼(從第二個dll我只引用tlb ,LIB,DLL文件,和Visual Studio做一切

看看這個教程它使過程水晶球一樣清晰: http://www.codeproject.com/Articles/505791/A-Beginner-Tutorial-for-Writing-Simple-COM-ATL-DLL?q=creating+an+atl+dll+c%2b%2b

只要記得找TLB和LIB(通常在編譯後創建另一個dll的文件夾中),並通過在解決方案資源管理器中右鍵單擊來引用它們,並添加 - >爲主dll所引用的第二個dll添加現有項.tlb和lib允許您從DLL(總是警察y每次將代碼更新到第二個dll時,將它們的新版本插入到您的項目文件夾中)。