如何在通过.def文件导出时使用dllImport导入函数?

时间:2015-03-19 20:23:31

标签: c++ visual-studio dll zlib

我很难将Minizip的http://www.winimage.com/zLibDll/minizip.html)示例源代码编译到Windows中的控制台应用程序中。

在尝试构建minizip.c示例时,我收到以下错误:

Error   9   error LNK2019: unresolved external symbol _zipClose referenced in function _main    C:\tst_create_zip\tst_create_zip\tst_create_zip.obj
Error   13  error LNK2019: unresolved external symbol _zipOpen2_64 referenced in function _main C:\tst_create_zip\tst_create_zip\tst_create_zip.obj

我在zip.h中看到函数是用extern" C"和__cdecl调用约定,所以链接器期望函数的某种c样式名称(它总是包含下划线' _'?)

zlibwapi.dll(包含zLib和Minilib)的依赖性walker显示导出的函数没有下划线,例如" zipClose"," _zipOpen2_64"。

所以问题是:如何告诉链接器在没有下划线的情况下搜索函数名称?或者我应该使用LoadLibrary()吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

事实证明我错过了预处理程序指令

#ifdef ZLIB_WINAPI
#include <windows.h>
// No need for _export, use ZLIB.DEF instead. 
// For complete Windows compatibility, use WINAPI, not __stdcall. 
#define ZEXPORT WINAPI

当我定义ZLIB_WINAPI时,它有效。

一个误导我理解的事情是在函数声明之前没有__declspec(dllexport)。然而,链接器能够解析导入。