2010-12-16 31 views
5

COMを使用しないでC++アンマネージドアプリケーションからc#dllを呼び出す方法はありますか?COMなしのアンマネージC++アプリからC#dllを呼び出す

+0

[埋め込みモノ](http://www.mono-project.com/Embedding_Mono)... – cdhowie

+0

は、混在モードのDLLを使用して実行できます。 –

+0

[C++からC#コードを呼び出す]の複製が可能です。(http://stackoverflow.com/questions/778590/calling-c-sharp-code-from-c) – cdiggins

答えて

5

あなたはこのReverse P/Invokeを使用して行うことができます - 例と議論hereを。

+1

ありがとうございます。それは面白い。 –

0

本当にあなたの唯一の選択肢は、C++ .netを使用するか、必要なものをエクスポートするためのC++ .netラッパーを作成することです。

Calling C# code from C++

2

エクスポートされた関数を使用して逆アセンブル、ILの修正、再アセンブルが実際に可能です。私はこれを数年前に混乱させ、dllを逆アセンブルし、潜在的にエクスポートできる機能のリストを提供するアプリケーションを作成しました。ユーザーはそれらを選択してILを書き直してすべてを再アセンブルすることができます。その後、管理されていないコードからdllを直接呼び出すことができます。または、管理コードからdllをp-invokeすることもできます(実用的ではありませんが、面白いです)。

確かに、これは.net言語自体でサポートされていない理由があります(それはMSILでもサポートされています)。少し遅れ

http://www.csharphelp.com/2007/03/exporting-managed-code-as-unmanaged/

+1

C++/CLIでサポートされているので、静的なC++/CLI関数を__declspec(dllexport)すると自動的にCLRをロードするサンクが作成されます。もちろん、大きなトリックですが、CLRをロードせずにマネージコードを実行することはできません。 –

+0

@ハンスILにエクスポートを追加すると、ILASMはアセンブリがネイティブのものであるかのように使用するために必要なすべてを行います。 –

1

は私がかもしれませんが、アウトthisを確認してください。私は、本番でこれを使用することはありません。

この小さなmsbuildタスクを使用すると、あたかもネイティブDLLであるかのように呼び出せるC#ライブラリを作成できます。 (たとえば、ネイティブDLLである必要があるアプリケーション用のプラグインを作成してください)

すべてをセットアップするproject templateを使用することを忘れないでください。

関連する問題