gpt4 book ai didi

c++ - "Run-Time Check Failure #0 - The value of ESP"调用dll函数时

转载 作者:行者123 更新时间:2023-11-28 01:17:42 24 4
gpt4 key购买 nike

我有一个带有 lib.h 的 dll:

#pragma once

#ifdef EXPORTS
#define API __declspec(dllexport)
#else
#define API __declspec(dllimport)
#endif

extern "C" API void test1(std::vector<ValueType*>* functions);

和 lib.cpp:

#include "pch.h"
#include <iostream>
#include <vector>

#include "ValueType.h"
#include "NumberValue.h"

#include "TestLib.h"

void test1(std::vector<ValueType*>* functions) {
functions->push_back(new NumberValue(123321));

使用这个 dll 的主文件是:

#include <iostream>
#include <vector>
#include <Windows.h>


#include "ValueType.h"


using namespace std;


typedef void (WINAPI* importedInitFunction)(std::vector<ValueType*>*);
importedInitFunction test1F;

std::vector<ValueType*> values;


int main() {
while (1) {
HMODULE lib = LoadLibrary("DllTest1.dll");


test1F = (importedInitFunction)GetProcAddress(lib, "test1");

test1F(&values);
test1F(&values);

std::cout << values.at(0)->asString();

FreeLibrary(lib);
system("pause");
}
return 0;
}

当我试图编译我的代码时,我发现错误:“运行时检查失败 #0 - ESP 的值未在函数调用中正确保存。”,在线“test1F(&values) ;".

如何解决?

最佳答案

问题在于,在主程序中,您声明了函数指针 WINAPI,它扩展为 __stdcall , 但默认调用约定(由 DLL 使用)是 __cdecl .

调用约定中的这种不匹配是导致您出现问题的原因。要解决它,请删除 WINAPI 宏,或者使 DLL 函数 WINAPI

关于c++ - "Run-Time Check Failure #0 - The value of ESP"调用dll函数时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58095746/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com