オプション 1: .NET InstallUtil (通常の .NET インストールの一部)
への参照を追加してからSystem.Configuration.Install
、次のようなものをアセンブリにドロップします。
[System.ComponentModel.RunInstaller(true)]
public class Sample : System.Configuration.Install.Installer
{
public override void Uninstall(System.Collections.IDictionary savedState)
{
base.Uninstall(savedState);
this.Context.LogMessage("This can be in a .dll.");
// Do your thing...
}
}
次に、.NET InstallUtil を悪用します。
%windir%\Microsoft.NET\Framework\v2.0.50727\installutil /logtoconsole=false /logfile= /u [your assembly .dll here]
特にすべてのコマンド ライン パラメーターがログ記録を無効にしない限り、少し面倒かもしれません。
オプション 2: ネイティブ rundll32 を使用して逆 P/静的クラス メソッドを呼び出す
2016 編集: Nuget パッケージになりました: UnmanagedExports ( src )!
不明な MSIL ディレクティブ(msdn フォーラム、2007 年) は、IL アセンブリ言語プログラマーズ リファレンス (2000 年 10 月 3 日、pg.74) のベータ 1 リリースにリンクしています。
fromunmanaged が指定されている場合、ランタイムは、アンマネージド メソッド呼び出しをマネージド呼び出しに変換し、メソッドを呼び出し、結果をアンマネージド環境に返すサンクを自動的に生成します。
詳細については、Expert .NET 2.0 IL アセンブラーおよびInside Microsoft を参照してください。NET IL アセンブラー. (最適な検索キーワード: ilasm vtentry)。
関連読書:
アンマネージド エクスポート: アセンブリをコンパイルできません(stackoverflow、2010)
管理されていないエクスポート / RGiesecke.DllExport.dll (stackoverflow、2010)
stdcall を使用して Delphi アプリにインポートできる C# DLL を作成する(stackoverflow、2009 年)
アンマネージドエクスポート用の C# プロジェクト テンプレート( Robert Giesecke、2010) - msbuild、vs2010 統合
IKVM.Reflection 更新: 静的マネージ メソッドをアンマネージ DLL エクスポートとしてエクスポート(mono、2011)
C++/CLI を使用しない DLL エクスポートの簡単な方法(codeproject、2009 年) - 64 ビット サポートなし?
.NET 関数のアンマネージド プログラムへのエクスポートを自動化する方法(codeproject、2006) - 64 ビットをサポート
"Reverse P/Invoke" シナリオをサポートするために .Net 4.0 に追加されたものはありますか? (msdn フォーラム、2010 年) - コード リスト
アンマネージド コードはマネージド メソッドをラップできる(codeproject、2004)
潜在的な欠点:
リバース ピンボーク (アンマネージド コードからマネージド コードへのコールバック)に関する問題 (msdn ブログ、2006 年)
逆 P/Invoke と例外(msdn ブログ、2008 年)