我可以使用mingw正确编译DLL并执行导出/导入操作。 我正在寻找的是正确定义dll onloadfunction,就像在MS VC产品中一样。 谷歌没有发现任何事情。 任何人有任何想法或指向教程的链接?
好吧,经过一些摆弄……所以它正在发挥作用。 对于其他任何有问题的人来说,这是。 我的问题与编译无关,而不是动态加载。 这是几个教程/问题/方法的混搭让我达到了这一点。
dll.c
#include #include #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 ("Hellon"); }
dll.h
#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 #include 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 initn"); } static void __attribute__((destructor)) your_lib_destroy(void) { fprintf(stderr, "library destroyn"); }
以上就是c/c++开发分享如何为mingw32指定dll onload函数?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/562635.html