你知道Python有from urllib import *
,但也提供from urllib import request
,所以你可以导入那个符号吗?不幸的是,C / C ++没有提供,但这就是我想要做的事情:from windows.h import OutputDebugStringA
,因为我只需要一个功能。这仅适用于个人项目。
我使用cl.exe main.cpp /EP
进行预处理,它告诉我这应该有效
typedef char CHAR;
typedef const CHAR *LPCSTR, *PCSTR;
__declspec(dllimport)
void
__stdcall
OutputDebugStringA(
LPCSTR lpOutputString
);
但是我仍然收到链接器错误:
main.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) void __cdecl OutputDebugStringA(char const *)" (__imp_?OutputDebugStringA@@YAXPEBD@Z) referenced in ...
为什么?
答案 0 :(得分:2)
问题是Windows API基于C
,因此要调用的函数是C
函数,而不是C ++函数。
在C ++编译器下编译时的问题是函数名称被破坏(由于C ++使用函数重载)。因此,函数名称与导入库中定义的实际函数名称不同(在本例中为kernel32.lib
)。因此,您会收到无法找到该函数的链接器错误。
修复是使用extern "C"
作为函数的限定符,这样C ++就不会破坏函数名。
但是,我不推荐用于Windows开发,即不包括windows.h
头文件。通过包含windows.h
头文件可以避免此类问题。
答案 1 :(得分:0)
以下是诀窍:
extern "C" __declspec(dllimport) void __stdcall OutputDebugStringA(const char* lpOutputString);