类在托管c++中从c#调用
class in managed c++ called from c#
我在托管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#代码中使用。
相关文章:
- 如何在qt中从另一个类调用函数
- 如何从二进制文件中的给定符号中获取调用程序图
- 如何在 C/C++ 中从外部库调用函数
- 如何链接 DLL 以供 LoadLibrary() 使用(在 Windows 上的 C++ 中)并从调用 exe 导入变
- 如何在C++中从另一个协程调用协程?
- 如何在 C++ 中从 V8 调用 Javascript 函数
- 通过 id 访问 QML 插槽中的嵌套对象(从 c++ 调用)
- 如何在JNI中从线程内部调用JAVA方法
- 如何在 c++ 中从 rosettacode 调用这个吴晓林的直线算法
- 从C++调用网络摄像头并在 Python 中显示图像
- 从 lambda 中的调用函数返回
- 当可以返回错误/异常时,从库中终止调用程序(例如,调用exit())是否总是错误的?
- 无法确定为什么函数调用中从 char* 到 char 的无效转换
- 如何从perf_event_open的环形缓冲区中检索调用链以进行PERF_RECORD_SWITCH?
- 如何在类中从排序调用比较器函数C++
- 在Qt中从C ++调用Java方法
- 在线程中从C++调用Lua
- 如何在另一个进程中从c#调用c++导出函数
- 类在托管c++中从c#调用
- 使用std::cout在DLL中从c#调用