如何为mingw32指定dll onload函数?

| 我可以使用mingw正确编译DLL,并执行导出/导入操作。我正在寻找的是正确定义dll onload函数,就像在MS VC产品中那样。 Google没有打开任何东西。任何人都有任何想法或指向教程的链接吗?     
已邀请:
        好吧,所以经过一番摆弄之后……它开始工作了。对于这里遇到问题的其他人。我的问题与编译而不是动态加载无关。这是一些教程/问题/操作方法的混搭,使我明白了这一点。 dll文件
#include <stdio.h>
#include <windows.h>
#include \"dll.h\"

//extern \"C\" BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD Reason, LPVOID LPV) {
//This one was only necessary if you were using a C++ compiler

BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) {

    switch (fdwReason)
    {
        case DLL_PROCESS_ATTACH:
            // Code to run when the DLL is loaded
        printf (\"Load working...\\n\");
            break;

        case DLL_PROCESS_DETACH:
            // Code to run when the DLL is freed
        printf (\"Unload working...\\n\");
            break;

        case DLL_THREAD_ATTACH:
            // Code to run when a thread is created during the DLL\'s lifetime
        printf (\"ThreadLoad working...\\n\");
            break;

        case DLL_THREAD_DETACH:
            // Code to run when a thread ends normally.
        printf (\"ThreadUnload working...\\n\");
            break;
    }

    return TRUE;
} 

EXPORT void hello(void) {
    printf (\"Hello\\n\");
}
dll文件
#ifndef DLL_H_
#define DLL_H_

#ifdef BUILD_DLL
/* DLL export */
#define EXPORT __declspec(dllexport)
#else
/* EXE import */
#define EXPORT __declspec(dllimport)
#endif

EXPORT void hello(void);

#endif /* DLL_H_ */
你好ç
#include <windows.h>
#include <stdio.h>

int main () {

    /*Typedef the hello function*/
    typedef void (*pfunc)();

    /*Windows handle*/
    HANDLE hdll;

    /*A pointer to a function*/
    pfunc hello;

    /*LoadLibrary*/
    hdll = LoadLibrary(\"message.dll\");

    /*GetProcAddress*/
    hello = (pfunc)GetProcAddress(hdll, \"hello\");

    /*Call the function*/
    hello();
    return 0;
}
当编译时
gcc -c -DBUILD_DLL dll.c
gcc -shared -o message.dll dll.o -Wl,--out-implib,libmessage.a
gcc -c hello.c
gcc -o hello.exe hello.o message.dll
产生预期的输出
Load working...
Hello
Unload working...
    
        由于mingw只是GCC和相关工具的Windows端口,因此可以使用GCC构造函数和析构函数属性。这些可用于共享库和静态库,并分别在main运行之前和之后执行代码。此外,您可以为每个库指定多个构造函数和析构函数。
static void __attribute__((constructor))
your_lib_init(void)
{
    fprintf(stderr, \"library init\\n\");
}

static void __attribute__((destructor))
your_lib_destroy(void)
{
    fprintf(stderr, \"library destroy\\n\");
}
    

要回复问题请先登录注册