gpt4 book ai didi

c++ - 运行函数时运行时检查失败 #0

转载 作者:可可西里 更新时间:2023-11-01 11:33:41 25 4
gpt4 key购买 nike

我在尝试使用这个函数时遇到这个错误

 void WSPAPI GetLspGuid( LPGUID lpGuid )
{
memcpy( lpGuid, &gProviderGuid, sizeof( GUID ) );
}

错误

Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call.  This is usually a result of calling a function declared with one calling convention with a function pointer declared with a different calling convention.

函数调用使用

HMODULE         hMod = NULL;
LPFN_GETLSPGUID fnGetLspGuid = NULL;
int retval = SOCKET_ERROR;

// Load teh library
hMod = LoadLibraryA( LspPath );
if ( NULL == hMod )
{
fprintf( stderr, "RetrieveLspGuid: LoadLibraryA failed: %d\n", GetLastError() );
goto cleanup;
}

// Get a pointer to the LSPs GetLspGuid function
fnGetLspGuid = (LPFN_GETLSPGUID) GetProcAddress( hMod, "GetLspGuid" );
if ( NULL == fnGetLspGuid )
{
fprintf( stderr, "RetrieveLspGuid: GetProcAddress failed: %d\n", GetLastError() );
goto cleanup;
}

// Retrieve the LSPs GUID
fnGetLspGuid( Guid );

最佳答案

此运行时检查可防止函数声明与实际定义之间的不匹配。将代码编译成静态库或 DLL 时可能发生的意外。常见的不匹配是调用约定或传递的参数的数量或类型。

这双鞋很合适,您有一个名为 WSPAPI 的宏,它声明了调用约定。它通常扩展为 __cdecl 或 __stdcall,通常偏向于 __stdcall。这个宏在您的客户端代码中具有错误值的可能性非常高。如果您不知道如何正确设置此宏,请向库作者寻求帮助。


编辑后:使用额外的故障模式,您正在加载错误版本的 DLL。并且您的 LPFN_GETLSPGUID 函数指针声明是错误的,缺少 WSPAPI 宏。我会把钱花在那个上面,尤其是因为我看不到它。


评论后,信息慢慢涌入:

it is defined as typedef void (*LPFN_GETLSPGUID) (GUID *lpGuid);

哪个是错的,应该是

typedef void (WSPAPI * LPFN_GETLSPGUID)(GUID *lpGuid);

如果您没有可用的宏(不太可能),则将 WSPAPI 替换为 __stdcall。

关于c++ - 运行函数时运行时检查失败 #0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16908085/

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