c – 无法编译访问另一个dll的DLL
所以,我有一个有趣的问题.我正在使用一组专有的dll,显然我没有源代码.目标是编写一个中间dll,将来自专有dll的大量函数调用组合在一起.当我用g编译时,我遇到的问题是我得到了原始dll的错误:
无法导出libname_NULL_THUNK_DATA.找不到符号. 如果我添加一个main并且只是编译成可执行文件,一切都按预期工作.我正在使用mingw进行编译.谢谢你的帮助. 回答第一个答复:要么我对你说的话感到困惑,要么我没有很好地说出我的问题.我没有明确地尝试从我的包装器中导出任何东西我只是从他们的dll中调用函数.问题是我得到错误,它无法将这些特定符号从dll导出到我的包装器.问题是我甚至不完全确定这些_NULL_THUNK_DATA符号是什么.我做了一个搜索并在某处读取它们不应该被导出,因为它们是Windows使用的内部符号.我已经尝试将–exclude-symbols指令用于链接器,但它似乎没有做任何事情.如果我完全误解了你想说的话,我道歉. 所以,我认为我的问题与此有关.当只编译使用dll的标准可执行文件时,我能够包含标题并直接调用函数,例如: #include :3rdparty.h int main(){ dostuff(); // a function in the 3rdparty.dll } 这将编译并运行正常.我只需要在g命令中链接库. 解决方法
它应该像你想象的那样容易.
例如: void doStuff() { 3rdparty.login(); 3rdparty.dostuff(); 3rdparty.logoff(); }; 到目前为止 – 非常好,你已经包含了正确的标题….(如果你有它们,如果你没有,那么你需要使用LoadLibrary()导入库,然后创建一个指向每个导出的dll入口点的函数指针使用GetProcAddress()然后调用该函数指针) 然后,您与第三方lib链接,就是这样.有时您必须使用’extern“C”’来包装定义,以便使链接名称更正确. 如你所说,你正在使用g,你不能与__declspec(dllimport)混淆,这是一个MS VC扩展. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |