xmlFree GetProcAddress

时间:2013-07-29 09:53:34

标签: winapi dll libxml2

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

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

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

这将成功,但调用此函数将失败,因为xmlFree未指向实际函数。

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

2 个答案:

答案 0 :(得分:0)

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

强制转型的第一部分指定结果类型,第二部分用正确的类型规范取消引用。

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

同样适用于libxml的其他函数指针(malloc,realloc& friends)。

答案 1 :(得分:0)

有一个获取地址xmlFree的函数:

xmlGlobalState xmlMem = {};
xmlMemGet(  &xmlMem.xmlFree,
            &xmlMem.xmlMalloc,
            &xmlMem.xmlRealloc,
            &xmlMem.xmlMemStrdup
            );
xmlMem.xmlFree( result );

我遇到类似的问题xmlFree为NULL,而在mingw下进行编译。 有效地,xmlFree()失败了SIGSEGV。