我試圖從C#應用程序中使用C++編寫的dll。我有C++ dll(Cyclone物理引擎)的第三方源代碼,不想手動將它移植到C#。在C#中使用C++ dll#
在C++項目
我改變它輸出一個dll。我改變它使用/ clr標誌。我將它改爲使用多線程調試DLL(/ MDd),因爲這是唯一與/ clr兼容且已編譯的。
在C#項目
我添加了對dll的引用。我正在使用旋風命名空間。
起初,在命名空間下沒有任何東西。我認爲這是因爲在C++代碼中,所有的類都聲明瞭沒有訪問修飾符,並且默認是私有的。所以對於類「粒子」我改變了定義:
public class Particle
{
//...
}
現在我可以宣佈成功從C#代碼類型的顆粒的變量。然而,intellesense和對象瀏覽器報告Particle是一個結構體(?),它根本不包含任何方法。 C++代碼在「public:」訪問修飾符之後聲明瞭一堆方法,所以我不知道問題是什麼。
例如,
public:
void integrate(real duration);
我在做什麼錯?
謝謝,保持C#和C++之間的差異對我來說真的很難...... P/Invoke Interop Assistant工具會引用由Caelum能夠自動生成一個包裝?還是有其他工具可以實現這一點? – colithium 2009-12-01 10:18:26
P/Invoke是一種調用未使用/ clr編譯的本地代碼的方式。你仍然不能實例化類,你只能調用函數。另一種方法是讓dll保持原樣並創建一個新的託管C++ dll。這包含一個可管理的api,旨在易於從.net使用。然後實現調用本地dll。你應該很容易在網上找到工作實例。 – 2009-12-01 12:05:14