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

это объявление неуправляемый классс использованием Managed 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. Класс wrapper должен переводить параметры и возвращать значения родных классов в соответствующие управляемые классы.

+0

: спасибо, что это сработало .... –

Смежные вопросы