Calling c++ dll from c#
Calling c++ dll from c#
**unmanaged class**
这是非托管类声明
#ifdef EXPORT_CLASS
#define DLL_EXPORT __declspec(dllexport)
#else
#define DLL_EXPORT __declspec(dllimport)
#endif
public class DLL_EXPORT cppclass
{
private:
string x;
public:
cppclass();
~cppclass();
string native();
};
**UNMANAGED CLASS DEFINITION**
这是非托管类定义
cppclass::cppclass()
{
x="hello";
};
cppclass::~cppclass()
{
};
string cppclass::native()
{
return x;
};
**MANAGED CLASS**
这是托管类声明
public __gc class Mclass
{
//private:
public:
cppclass * obj;
public:
Mclass();
~Mclass();
string native();
};
**MANAGED CLASS DEFINITION**
这是托管类定义
#include"managed.h"
Mclass::Mclass()
{
obj=new cppclass();
};
Mclass::~Mclass()
{
delete obj;
};
string Mclass::native()
{
return obj->native();
};
所有这四个文件都在一个被制作成dll的项目中。现在如何在c#项目中使用它
在 C# 项目中添加对 DLL 的引用,并像使用任何 .NET 类型一样使用它。您可能在 DLL 中找不到任何导出的类型,因为这些类型必须是公共的。
我希望您谈论的是 C++/CLI,而不是 C++/CLI 之前的托管C++。
这整件事是一场灾难。 这不是 C++/CLI 代码,而是旧的托管扩展C++已损坏。 此外,从 DLL 导出本机类是一个非常糟糕的主意。 将本机代码与托管类定义静态链接,从而创建单个 DLL。
相关文章:
- 挂起和取消挂起一个文件DLL
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- 导入库可以跨dll版本工作吗
- 从C++dll访问C#中的一行主要参数
- 链接到自行创建的dll失败
- 为什么使用 P/Invoke 调用 dll 时,某些计算机中的 LoadLibrary 失败?
- 在调用FreeLibrary后,释放动态链接到具有相同版本的CRT堆的DLL的内存
- Calling C++ dll from python
- P/Invoke WlanHostedNetworkQueryStatus from wlanapi.dll
- call delphi dll from visual c++
- MFC-传递带有PostMessage From DLL的字符缓冲区
- Calling C# COM DLL from C++
- Calling ATL COM dll from MFC
- Calling C# dll from C++
- call c++ dll from java
- Calling Win32 DLL from C++
- Calling c++ dll from c#
- Calling .NET DLL from Java
- Calling a C++ DLL from C#
- C# mashal const std::list<object> from c++ dll