gpt4 book ai didi

c++ - 由于从 C 到 C++ 的类型转换,无法编译并出现错误 C2440

转载 作者:太空宇宙 更新时间:2023-11-03 17:25:11 26 4
gpt4 key购买 nike

inline BOOL FupVmCall(ULONG_PTR hypercall_number, void *context) {
#pragma section(".asm", read, execute)
__declspec(allocate(".asm")) static const BYTE CODE[] = {
0x0F, 0x01, 0xC1, // vmcall
0x74, 0x0E, // jz short errorWithCode
0x72, 0x04, // jb short errorWithoutCode
0x48, 0x33, 0xC0, // xor rax, rax
0xC3, // retn
// errorWithoutCode:
0x48, 0xC7, 0xC0, 0x02, 0x00, 0x00, 0x00, // mov rax, 2
0xC3, // retn
// errorWithCode:
0x48, 0xC7, 0xC0, 0x01, 0x00, 0x00, 0x00, // mov rax, 1
0xC3, // retn
};

typedef unsigned char(__stdcall * AsmVmxCallType)(
_In_ ULONG_PTR hypercall_number, _In_opt_ void *context);

#pragma warning(suppress : 4055)
AsmVmxCallType AsmVmxCall = (AsmVmxCallType)CODE;

__try {
return AsmVmxCall(hypercall_number, context) == 0;
} __except (EXCEPTION_EXECUTE_HANDLER) {
SetLastError(GetExceptionCode());
return FALSE;
}
}

我正在尝试使用 VS2019 从 C++ 项目编译以上代码

如果我将主文件更改为 main.c,它编译没有任何问题

但是,如果我将其更改为 main.cpp,则会出现 C2440 类型转换问题。

C2440   'type cast': cannot convert from 'const BYTE [27]' to 'AsmVmxCallType'
AsmVmxCallType AsmVmxCall = (AsmVmxCallType)CODE;

我什至尝试用 extern "C" 包裹,但没有解决问题。

我怎样才能进行这种类型转换?

最佳答案

您可以先将 CODE 转换为空指针,然后再将其转换为您的函数指针:

AsmVmxCallType AsmVmxCall = (AsmVmxCallType)(void *)CODE;

关于c++ - 由于从 C 到 C++ 的类型转换,无法编译并出现错误 C2440,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59532657/

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