2010-12-28 6 views
2

私は従来の管理されたC + +のDLLを持っている、私は管理型を返すいくつかの関数を呼び出す必要があります。マネージ型なしdllexportsについてはdllのclrパラメータを含むエクスポート関数?

、これは簡単ですが、私はちょうどこのようなヘッダーでの私の静的C(++)関数を定義:

extern "C" 
{ 
    __declspec(dllexport) int __cdecl InitSystem(); 
} 

をしかし、今、静的C(++)関数が返す必要があります管理されたタイプ、そしてここで私は問題を持っています。私が試してみると、:

私はコンパイラエラーが発生します(関数定義には__clrcall署名が必要です)。

DLLはアセンブリではないので(私は思います)、.NET/clrパラメータを使用して簡単な関数呼び出しをエクスポートする方法は少し分かりません。これはおそらく単純で、間違った方向を見ているだけでしょうか?

答えて

2

アセンブリである必要があります。そのような管理型のコードを構築する他の方法はありません。管理されたコードとネイティブコードを1つのアセンブリに混在させても問題ありません。これは自動的に問題を解決し、機能はメタデータで利用できるようになり、エクスポートする必要はありません。すべてのデコレーションを削除する必要があります。管理対象メソッドには適用できません。他のマネージド言語でも使用できるようにするには、refクラスが必要です。

public ref class Mumble { 
public: 
    static System::Collections::Generic::List<System::String^>^ InitSystem(); 
}; 

C#プログラムでは、var lst = Mumble.InitSystem()を使用できるようになりました。名前空間を使用することをお勧めします。

/clr btwに注意してください。ネイティブコードを苦情なしにILに簡単に変換します。ソースコードファイルで/ clrをオフにするか、#pragma managedを使用してください。

関連する問題