Winapi xmlFree GetProcAddress

Winapi xmlFree GetProcAddress,winapi,dll,libxml2,Winapi,Dll,Libxml2,我必须在Windows下通过LoadLibrary和GetProcAddress动态加载libxml2的DLL接口。除了xmlFree之外,我使用的所有函数指针都已正确加载 xmlFree不是一个普通的DLL导出,而是一个函数指针。因此,“xmlFree”上的GetProcAddress将返回指向xmlFree函数指针的指针 typedef void (*LibXmlFree) (void* mem); LibXmlFree xmlFree = GetProcAddress( hModule,

我必须在Windows下通过LoadLibrary和GetProcAddress动态加载libxml2的DLL接口。除了xmlFree之外,我使用的所有函数指针都已正确加载

xmlFree不是一个普通的DLL导出,而是一个函数指针。因此,“xmlFree”上的GetProcAddress将返回指向xmlFree函数指针的指针

typedef void (*LibXmlFree) (void* mem);
LibXmlFree xmlFree = GetProcAddress( hModule, "xmlFree" );
因此,这将成功,但调用此函数将失败,因为xmlFree没有指向真正的函数

typedef void (*LibXmlFree) (void* mem);
LibXmlFree xmlFree = GetProcAddress( hModule, "xmlFree" );

如何创建指向DLL的xmlFree(void*)导出的正确指针?

要分配真正的xmlFree指针,必须取消引用GetProcAddress返回的指针

强制转换的第一部分指定结果类型,第二部分使用适当的类型规范解除对它的引用

xmlFree = (void (__cdecl *)(void *))    *((void (__cdecl **)(void *)) GetProcAddress( hModule, "xmlFree" ));

libxml的其他函数指针(malloc、realloc和friends)也应该如此。

有一个函数可以获取地址xmlFree:

xmlGlobalState xmlMem = {};
xmlMemGet(  &xmlMem.xmlFree,
            &xmlMem.xmlMalloc,
            &xmlMem.xmlRealloc,
            &xmlMem.xmlMemStrdup
            );
xmlMem.xmlFree( result );
在mingw下编译时,我遇到了类似的问题,即
xmlFree
为NULL。 实际上,xmlFree()与SIGSEGV一起失败