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

How to import functions using dllImport when they were exported via .def file?

我很难将 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 的 Dependency walker(同时包含 zLib 和 Minilib)显示导出的函数没有下划线,例如 "zipClose"、“_zipOpen2_64”。

所以问题是:如何告诉链接器搜索不带下划线的函数名?或者我应该改用 LoadLibrary() 吗?

提前致谢。

原来我缺少预处理器指令

#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)。不过,链接器能够解析导入。