【发布时间】:2019-04-07 18:20:08
【问题描述】:
作为一名 Xcode 开发人员,我也必须在 Windows 上使用我编写的代码。我想我已经成功地掌握了所有跨平台问题,但现在我在理解 Windows 上的 DLL 地狱时遇到了真正的问题。 我成功地将我的代码与 Xcode 和 Gcc (Ubuntu) 一起使用。在 Windows 上,我收到一条错误消息:
运行时检查失败 #0 - ESP 的值未在函数调用中正确保存。这通常是调用使用一种调用约定声明的函数和使用另一种调用约定声明的函数指针的结果。
我阅读了很多关于此用途的信息,但我在理解这个问题时遇到了问题。 通常在 Windows 上我有类似的东西
#define MYLIB_API __declspec(dllimport)
我在 Bass 库 (bass.h) 的标题中找不到这个。只有一行
#define BASSDEF(f) WINAPI f
现在,我尝试在我的代码中动态加载 DLL 函数。您可以在底部看到动态加载标题作为链接。这里要复制的太多了。这种动态加载适用于 .dylib 和 .so 库,而不适用于 .dll 我的目标是使用额外的库加载动态而不是静态的 DLL。
在我的代码中,我使用了 bass.h 和 bassdecode.h。在我的代码中,我称之为示例:
bool returnVar = _BASS_SetConfig(BASS_CONFIG_DEV_DEFAULT,1);
在这里我得到了调用约定消息。
我必须在头文件中做什么才能在 Windows 上成功导入 DLL 函数?
您可以在以下地址下载文件:header files to download
【问题讨论】:
-
请贴出错误信息
-
我已将黄色部分的消息改为Windows的原始消息文本
-
这是一个非常普通的 MSVC++ 运行时错误,函数的声明与实际定义不符。没有正确声明函数指针很容易出错。很可能是缺少
__stdcall,我们看不到。 -
正如我所写的,我已将两个头文件、my 和 bass lib 添加到帖子中。据我了解,DLL 是否必须具有 EXPORT。在我的头文件中,我使用了他的功能,我需要一个 IMPORT。但是在bass头文件中没有EXPORT,只是一个WINAPI的东西。所以我很困惑我必须在头文件中做什么才能很好地导入 DLL 函数。