2011-07-11 68 views
3

叫我decalred內部管理C++ DLL一類爲類託管C++從C#

public class IPHelper 
{ 
public: 
    static void CheckIP(LPWSTR pSocketName); 
    static void DebugMessage(const wchar_t *str, ...); 
private:   
    static DWORD GetIPInformation(PSOCKET_RECORD &pInfo); 
}; 

我成功編譯它,並將其添加爲引用我的C#項目。 我能夠使用命名空間,但類似乎是空的,我無法調用它裏面的函數。

任何想法?

回答

3

該類不受管理,它是本地的。如果您想從託管代碼中使用它,則需要將其稱爲public ref class

1

您將需要使用P/Invoke方法調用它。有關更多信息,請參閱this參考。

1

正如其他人所指出的那樣,這是一個本地C++類。假設您的項目啓用了CLR,那麼您可以輕鬆地編寫一個簡單的C++/CLI包裝器,這將允許您在託管上下文中使用它。

This是一個C++/CLI的快速概述,它應該讓你開始朝着正確的方向發展。

1

該類似乎是一個混合。你指定了公共類IPHelper,這是你想要的一半。你應該將它指定爲public ref class IPHelper。但即便如此,由於它所接收的參數類型,它仍然不能與託管類交互。例如,wchar_t與System :: String ^(託管C++聲明字符串的方法)不同。類似地,LPWSTR也不同於System :: String ^。作爲一個方面說明,最好是編寫一些實用程序方法來在.NET System :: Strings和wchar_t以及其他很可能需要的本地字符串之間進行轉換。 This是關於如何在所有各種字符串類型之間進行轉換的MSDN上的優秀文章。

現在我不知道你是想直接將這個類公開給C#,還是讓這個類反過來由一個比你在這裏有更好的託管包裝包裝。但無論如何,只要您這樣做,Managed C++類的方法就必須採用.NET類型才能直接在C#代碼中使用。