2012-02-10 74 views
0
**unmanaged class** 

这是不受控类声明使用托管C++ DLL在c#

#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()不是由语言

回答

2

您正在返回支持一个来自C++/CLI包装类的本地字符串。您需要返回一个托管的.net字符串。包装类必须翻译参数并将本机类的值返回给适当的托管类。

+0

:谢谢你的工作.... – 2012-02-10 08:11:02