簡體   English   中英

在C#中使用C ++ dll

[英]Using a C++ dll in C#

我正在嘗試使用C#應用程序中用C ++編寫的dll。 我有C ++ dll(Cyclone物理引擎)的第三方源代碼,並且不想手動將其移植到C#。

在C ++項目中
我將其更改為輸出dll。 我將其更改為使用/ clr標志。 我將其更改為使用多線程調試DLL(/ MDd),因為那是唯一與/ clr兼容並進行編譯的。

在C#項目中
我添加了對dll的引用。 我正在使用旋風命名空間。

最初,名稱空間下絕對沒有任何內容。 我認為這是因為在C ++代碼中,所有類都聲明為沒有訪問修飾符,並且默認為private。 因此,對於“ Particle”類,我將定義更改為:

public class Particle
{
//...
}

現在,我可以從C#代碼中成功聲明一個類型為Particle的變量。 但是,智能感知和對象瀏覽器將粒子報告為結構(?),並且根本不包含任何方法。 C ++代碼在“ public:”訪問修飾符之后聲明了一堆方法,因此我不知道問題出在哪里。

例如,

public:
void integrate(real duration);

我究竟做錯了什么?

粒子類不是托管類,因此將其視為結構。 您需要使用ref關鍵字來對其進行管理和垃圾收集。 您還需要對引用它的其他所有類進行相同的操作,這可能是一個問題。 我認為最好的解決方案是創建一個在內部使用Particle類的托管包裝類。 然后,.net可以引用該包裝器類。

這里

之前我還沒有真正遇到過您的確切問題,但是我以前在c#中使用過C ++ dll。 通常,當調用這樣的dll時,將使用dllImport關鍵字。 基本上,您可以定義一個從c ++ dll導入所有類型和方法的類。 然后,您可以調用這些包裝器類。

我還不是專家,但是我已經使用它來訪問win32方法和我需要使用的其他一些庫。

Codeplex上的鏈接具有一些可能有用的鏈接工具。 但是最重​​要的可能是Interop Assistant。 它可以為您的c ++ dll生成C#包裝器。

這並不是您要問的,但我認為這可能有助於尋找另一個方向。

嘗試使用ref關鍵字聲明c ++類:

public ref class Particle

您對COM Interop有參考嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM