4

いくつかの深刻なグーグルが潜んでいた後、この問題に関連する有用なものは何も見つからなかったので、ここで質問します.

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 の戻り値を呼び出す必要があるため、単純に呼び出すことはできません。関数を直接エクスポートしました。

では、これを達成するにはどうすればよいでしょうか。

ありがとう

4

2 に答える 2

0

非永続メモリ マップ ファイルを使用して、アプリケーションと DLL の間でデータを交換できます。

于 2013-06-02T08:24:29.110 に答える