返回整数(无参数)的外部DLL函数给出编译器错误:
无法在赋值中将“int*”转换为“int(*)()”
我希望返回一个int
值(在VBA中可以,但在C++中不行)。
在.h
文件中:
extern "C" {
__declspec(dllimport) int __stdcall WieOpenDev(void);
}
main.cpp
中的代码:
int (*fcnPtrGetDev)();
fcnPtrGetDev = WieOpenDev;
std::cout << fcnPtrGetDev << '\n';
编译时给出错误:
无法在赋值中将“int*”转换为“int(*)()”
我尝试在VBA中使用此DLL函数。它确实工作得很好,返回值是6
,这是正确的。
但是C++给出了这个错误。
我也试过:
int GetDev;
GetDev = WieOpenDev;
这在编译时会给出一个不同的错误:
从“int(*)()”到“int”的转换无效[-fpermissive]
1条答案
按热度按时间bpsygsoo1#
对于
x64
目标,代码应该可以正常工作,但对于Win32
目标,__stdcall
实际上会产生不同。对于这两个目标,应编译以下代码:参见Godbolt演示。
注意:要实际调用函数指针所指向的函数,需要使用
而不是
后者会导致打印指针值,而不是调用函数的结果。