如何在通过 .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)。不过,链接器能够解析导入。
我很难将 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)。不过,链接器能够解析导入。