2012-02-09 14 views
3
**unmanaged class** 

これはこれはこれは、管理クラス宣言呼び出すC言語は、C#

public __gc class Mclass 
{ 
//private: 
public: 
cppclass * obj; 
public: 
Mclass(); 
~Mclass(); 
string native(); 

で管理されていないクラス定義

cppclass::cppclass() 
{ 
x="hello"; 
}; 
cppclass::~cppclass() 
{ 
}; 
string cppclass::native() 
{ 
return x; 
}; 

**MANAGED 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** 

あるからdllを++ };

**MANAGED CLASS DEFINITION** 

//これで

#include"managed.h" 
Mclass::Mclass() 
{ 
    obj=new cppclass(); 
}; 
Mclass::~Mclass() 
{ 
    delete obj; 
}; 
string Mclass::native() 
{ 
return obj->native(); 
}; 

すべてのこれらの4つのファイルがAC#プロジェクトでそれを使用する方法dll.Nowに作られたプロジェクトである管理クラス定義

+2

スニペットは非常に不完全です。 Mclassは 'public ref class'と宣言されなければならないので、アセンブリの外側から見ることができます。クライアントコードがDispose()を呼び出さないときにメモリをリークしないように、ファイナライザを実装する必要があります。そして、あなたのnative()メソッドは* obj *が削除されていないかどうかをチェックするべきです。 –

+0

@HansPassant:あなたの助けは非常に高く評価されています....将来的には完全なスニペットをポストして投稿しようとします.... –

+2

ポイントは*今*、次回ではありません。 –

答えて

1

このすべてが災難です。これはC++/CLIコードではなく、古いManaged Extensions for C++であり、壊れています。また、DLLからネイティブクラスをエクスポートすることは本当に悪い考えです。ネイティブコードを管理クラス定義に静的にリンクし、単一のDLLを作成します。

+0

混乱して申し訳ありません。ネイティブコードと管理対象クラス定義は、一緒にDLLを作成するプロジェクトにあります。 –

+0

@Manu:いいですね。あなたは 'EXPORT_CLASS'と' __declspec(dllexport) 'のものをすべて壊しておかなければいけません。 –

+0

ベンに感謝しています....働いています...助けてくれてありがとう –

5

C#プロジェクトでDLLへの参照を追加し、単に.NETのように使用します。 おそらく、エクスポートされた型はパブリックである必要があるため、DLL内に見つからない可能性があります。

編集:BTW。私はあなたがC++/CLIについて話していることを願っています.C++/CLIより前のManaged C++ではありません。

+0

AFAIK – Botz3000

+0

@ Botz3000でもクラスは名前空間にある必要はありません:あなたが正しいです - 答えを修正しました。 – Simon

+0

@ Simon yup私はC++/CLIについて話しています。少し具体的にお試しください。 –

関連する問題