16

実行可能ファイル (Visual C++ 10 を使用して作成したもの) があり、作成した別のプログラム (同じ環境) からその機能を使用する必要があります。ここでは説明しませんが、展開要件が複雑であるため、必要な機能から DLL を構築し、それを両方のプログラムにロードすることは、私にはできません。

__declspec(dllexport)だから私はEXEでいくつかの機能ができると思ったので、それらLoadLibrary()を許可しGetProcAddress()ます。

明らかにこれは不可能ですが、私がそれを見始めたとき - それは実行可能に見えました。

具体的に__declspec(dllexport)は、EXE プロジェクトで関数を実行する場合、Visual C++libは動的リンク用のファイルも生成するため、使用する必要さえありませんLoadLibrary()。結果のライブラリに対してリンクし、関数を呼び出すだけです。

残念ながら、主な問題は、結果のファイルを EXE として宣言すると、DLL が取得する "CRTDLLmain" の代わりに、Visual C++ が "CRTmain" エントリ ポイントを結果のファイルに追加することです。Windows がメイン プログラムから EXE を (自動的に) 実行LoadLibrary()すると、"CRTDLLmain" エントリ ポイントが呼び出されず (存在しないため)、モジュールの C ランタイムが初期化されず、その結果、すべての興味深い作業 (メモリ割り当てなど) は、interesting(*) ランタイム例外で失敗します。

次のように、私の質問は次のとおりです。「CRTmain」エントリ ポイント「CRTDLLmain」エントリ ポイントの両方の結果ファイルに Visual C++ をビルドする方法はありますか?

(*) 古い中国の呪いのように「面白い」。

4

3 に答える 3

0

単にいいえ!問題は、ロードする CRT と EXE で、いくつかのグローバル変数を使用することです。メインの EXE も同じことを行います。では、メモリ割り当てはどのように機能するのでしょうか?

このような構造を使用したい場合は、DLL を使用して meulti スレッド、CRT 初期化、その他すべてのものを認識する必要があります。あなたはこれを必要とします!

しかし、COM オートメーションはどうでしょうか。これは、ある EXE で別の EXE でコードを使用するための簡単なソリューションではないでしょうか?

于 2013-10-01T08:13:05.450 に答える