类在托管c++中从c#调用

class in managed c++ called from c#

本文关键字:中从 调用 c++      更新时间:2023-10-16

我在托管c++ dll中声明了一个类

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

我成功地编译了它,并将其添加到我的c#项目中作为参考。我能够使用名称空间,但是类似乎是空的,我无法调用其中的函数。

任何想法?

这个类不是托管的,它是本机的。如果您想在托管代码中使用它,则需要将其称为public ref class

您需要使用p/invoke方法来调用它。

正如其他人所注意到的,这是一个本地c++类。假设您的项目启用了CLR,那么您可以轻松地围绕它编写一个简单的c++/CLI包装器,这将允许您在托管上下文中使用它。

这是c++/CLI的一个快速概述,可以让你从正确的方向开始。

那个类似乎是一个混合体。您指定了公共类IPHelper,这是您想要的一半。您应该将其指定为公共ref类php。然而,即使如此,由于它接收的参数类型,它仍然不能很好地与托管类进行接口。例如,wchar_t与System::String^ (c++中声明字符串的托管方式)是不同的。类似地,LPWSTR也不同于System::String^。作为附带说明,最好编写一些实用程序方法,以便在。net System::Strings和wchar_t以及您最可能需要的其他本机字符串之间进行转换。这是一篇关于如何在各种字符串类型之间进行转换的优秀文章。

现在我不知道你是想把这个类直接暴露给c#,还是用一个比这里更好的包装器来包装这个类。但无论如何,托管c++类的方法必须采用。net类型,以便直接在c#代码中使用。