いくつかの深刻なグーグルが潜んでいた後、この問題に関連する有用なものは何も見つからなかったので、ここで質問します.
DLL を別のプロセスに挿入する C# で作成された、かなり簡単なプログラムがあります。[DllImport]でkernel32.dllからCreateRemoteThreadとLoadLibraryを呼び出します。
DLL がロードされると、C# プログラムからの認証を待ちます。セキュリティ上の理由により、ソケットを使用してこのデータを転送することはできません。そのため、認証データを使用して C# プログラムから呼び出される予定の関数を DLL にエクスポートさせます。
エクスポートされた関数は、次のように 2 つの引数を取ります。
extern "C" __declspec(dllexport) void DoStuff( const char* ccString1, const char* ccString2 ){
// Do stuff
}
DLL は C# プログラムと同じアドレス空間にないため、[DllImport] を使用してエクスポートされた関数を取得して呼び出すことはできません。
私の 2 番目のアイデアは、CreateRemoteThread を使用して関数を呼び出すことでした。ただし、これは 1 つの引数しか渡すことができませんが、2 つ必要ですが、GetProcAddress の戻り値を呼び出す必要があるため、単純に呼び出すことはできません。関数を直接エクスポートしました。
では、これを達成するにはどうすればよいでしょうか。
ありがとう