c# - 在 C# 中使用托管 C++ DLL

标签 c# 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();
};

Now all this is made into a dll and imported in a c# project


using managed;

 namespace ConsoleApplication1
 {
 class Program
 {
    static void Main(string[] args)
    {
        managed.Mclass first = new Mclass();
        String x=first.nativ();
        Console.Out.WriteLine(x);
    }

}

出现错误,Managed.Mclass.nativ() 不受语言支持

最佳答案

您正在从 C++/CLI 包装器类返回 native 字符串。您需要返回托管的 .net 字符串。包装器类必须将 native 类的参数和返回值转换为适当的托管类。

关于c# - 在 C# 中使用托管 C++ DLL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9223963/

相关文章:

将对象添加到 vector 时出现 C++ 错误

c# - 将 int(数字)转换为带前导零的字符串? (4 位数)

C++:构造函数、继承和初始化

c# - 在哪里可以找到设计良好的小型 C# 应用程序的源代码(用于学习目的)?

c# - WPF Listview 访问 SelectedItem 和子项

c++ - 多个无限线程

C++:检查是否引用了地址

c# - 从 .Net 访问 C++ com 对象(版本信息)

C# 如何按空格将字符串拆分为几个数组

c# - 如何在 C# 中存储 SQL 查询的结果字符串