起動引数を解析し、いくつかのDLLのうちの1つを「起動」する非常に小さなプログラムを書きたいと思います。実行時に実行可能ファイルのようにDLLを「開始」するにはどうすればよいですか?
私はすでにアプリケーションとしてアプリケーションを作成し、代わりにDLLとしてビルドするようにVisual Studioのプロジェクトプロパティを変更することで、DLLとして「実行」したいアプリケーションを作成しました。私はLoadLibraryとGetProcAddressをコンサートで使用して必要な機能を得る必要があることを知っていますが、この事実の多くはユースケースではないので、これに関する明確で包括的なドキュメントを見つけるのは難しいです。また、プロジェクトとプラットフォームの制限に基づいてこのルートに進む必要があります。
私はthis pageを見つけましたが、これにはいくつかの情報がありますが、私の目的に適応するには十分ではありません。
編集:今ここにいるのです。
:
__declspec(dllexport) int cdecl main(int argc, char *argv[])
私もDLLをロードし、上記の関数を実行する試みは、次のようになりますアプリケーションプロジェクトを持っている:
は、私は、その主な機能の署名次のようになりますDLLプロジェクトを持っていますtypedef int (CALLBACK* LPFNDLLFUNC1)(int, char *);
...
HMODULE dllHandle = NULL;
BOOL freeResult, runTimeLinkSuccess = FALSE;
LPFNDLLFUNC1 lpfnDllFunc1; // Function pointer
if (args->IsEmpty())
{
dllHandle = LoadLibrary(L"TrueApplication.dll");
if (NULL != dllHandle)
{
lpfnDllFunc1 = (LPFNDLLFUNC1)GetProcAddress(dllHandle, "main");
if (lpfnDllFunc1)
{
int retVal = lpfnDllFunc1(0, "1");
}
現在、LoadLibrary呼び出しは機能しますが、GetProcAddressは機能しません。
EXEではなくDLLにすることのメリットは何ですか?あなたの推論を知る必要があるので、あなたが探しているDLLの利点のいくつかを「取り消す」ソリューションを推奨しません。 –
この方法を使用することは私の選択でも私の考えでもありませんが、プラットフォームとプロジェクトの制限を考慮すると、私はこれを実行する必要があります。基本的に、DLLの代わりに複数の実行可能ファイルを使用する場合、このプラットフォームは各実行可能ファイルごとに異なるアプリケーション・エントリを持つ必要があります。たとえば、ユーザーは「ランチャー」アプリと「アプリ1」、「アプリ2」などをインストールする必要があります。 – Roderick