2010-06-09 69 views
0

我有一箇舊的C/C++類,我想重構和.NET中使用的PInvoke反向P /調用教程?

全部P訪問/調用教程是指調用Win32 API的,但我沒有發現任何其他端代碼

任何提示/想法?我的C/C++的經驗是很生疏:(

更新 - 這是用於包裝現有的C/C++代碼,以便它可以從.NET,使用P叫/調用

如何定義的C函數,以便從。我可以使用ref/out字符串獲得值

+1

我很困惑。您是否試圖從C#調用C/C++ DLL(除了win32 API)或試圖從C/C++調用C#代碼? – 2010-06-09 18:54:27

+0

什麼是C/C++類?你不能直接在P/Invoke中使用C++類,需要一個包裝器。 – 2010-06-09 19:21:51

+0

我正在嘗試重寫現有的c/C++代碼,以便可以從.net中調用.net – Kumar 2010-06-09 19:21:59

回答

1

根據我的經驗,最簡單的方法是將您的C++類變爲COM類(或者爲此創建一個輔助類),然後在其中添加對其的引用.NET項目

如果您想從C++訪問.NET對象,則情況正好相反,請將其標記爲ComVisible並使用tlbexp爲導入的本機代碼創建一個TLB(然後您可以將其用作常規COM對象)。

+0

使它兼容將是我的頭 這基本上是讀取一些自定義的二進制數據,所以pinvoke似乎最簡單,如果我能弄清楚如何返回ref/out字符串 – Kumar 2010-06-09 19:24:49

+0

@Kumar,你不必做出整體類COM兼容,只需使用調用此本機函數的一個函數創建一個小COM對象即可。否則,你可以使用P/Invoke,你試過'[MarshalAs(UnmanagedType.LPStr)] out string s'? – Motti 2010-06-10 05:47:53

+0

我是一個VC++新手,任何關於如何獲得的指針/示例,沒有顯示在谷歌搜索com兼容類等。 – Kumar 2010-06-10 14:12:05