3

Windows で以下に相当するものはありますか?

#include <dlfcn.h>
#include <stdio.h>

void main_greeting(void)
{
    printf("%s\n", "hello world");
}

void lib_func(void)
{
    void (*greeting)(void) = dlsym(RTLD_MAIN_ONLY, "main_greeting");

    greeting ? greeting() : printf("%s\n", dlerror());
}

int main(void)
{
    lib_func();

    return 0;
}

これは短いスニペットです。実際の目的は、動的に読み込まれたライブラリmain_greetingの関数 ( ) 内から、メイン プロセス ( )に存在することがわかっている関数を呼び出すことです。lib_funcメイン プロセスは変更できないため、コールバックを渡すように書き換えることはできません。

4

1 に答える 1

5

Windowsでは、実行可能ファイルとDLLは同じ形式(PE現在)であるため、実行可能ファイルは関数もエクスポートできます。GetProcAddress(GetModuleHandle(NULL),TEXT("main_greeting"))関数が実行可能ファイルからエクスポートされた場合、あなたが望むことをします。それ-Wl,-export-all-symbolsはmingwGCCのために行われます。

Microsoftのリンカーには同等のオプションはないと思います。そのため、Microsoftのツールチェーンを使用する場合は、次のことを行う必要があります。

于 2013-01-26T14:55:41.597 に答える