実行可能ファイル (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++ をビルドする方法はありますか?
(*) 古い中国の呪いのように「面白い」。