2010-11-24 42 views
0

晚安一些問題,關於C++/CLI和C#集成

我試圖在C++/CLI一個簡單的DLL使用類似下面的代碼在我的C#庫使用:

// This is the main DLL file. 

#include "stdafx.h" 

namespace Something 
{ 
    public class Tools 
    { 
     public : int Test (...) 
     { 
      (...) 
     } 
    } 
} 

我可以編譯dll並將其加載到C#項目中而不會有任何問題,並且可以使用C#中的命名空間Something和類Tools。問題是,當我嘗試編寫Tools.Test(某些東西)時,我收到一條錯誤消息,指出Tools沒有爲Test定義。爲什麼編譯器無法獲得該函數,即使它是公開的?

另外...我可以在兩個項目中共享一個類,一半用C#編寫,一半用託管C++編寫嗎?

非常感謝。

+0

顯示我們其他一半的代碼,試圖調用Test並失敗的部分 – abelenky 2010-11-24 23:21:01

回答

0

該功能不是靜態的。試試這個在

var someTools = new Tools(); 
int result = someTools.Test(...); 

或使該方法靜:

public : 
    static int Test (...) 
    { 
      (...) 
    } 
+0

Preet,Miguel的例子不起作用的原因不是因爲該方法不是靜態的,而是因爲該類不是一個ref類,因此對於CLR。使方法靜態不會改變這一點。 – 2010-11-24 23:49:27

1

C#只能訪問託管C++類。您需要使用public ref class Tools來指示Tools是一個託管類,以便從C#訪問它。欲瞭解更多信息,請參閱msdn

該類可以用於託管的C++或C#。請注意,託管的C++類也可以在內部使用本機C++類。

1

您可以在一個項目共享託管類,但你寫在非託管(即標準C++類。使用ref class關鍵字是什麼在C定義託管類++。

// This is the main DLL file. 

#include "stdafx.h" 

namespace Something 
{ 
    public ref class Tools 
    { 
     public : int Test (...) 
     { 
      (...) 
     } 
    } 
}