请教:c++编译时出现“error LNK2019: 无法解析的外部符号”错误。
代码如下,欲实现驱动级模拟按键的功能。win64Io.dll是网上免费的程序组件。我刚学c++,有很多地方不会,特别是命名规则,还有注释都不知怎么写,如果代码过于繁琐还请...
代码如下,欲实现驱动级模拟按键的功能。win64Io.dll是网上免费的程序组件。我刚学c++,有很多地方不会,特别是命名规则,还有注释都不知怎么写,如果代码过于繁琐还请见谅。
#include<Windows.h>
extern int InitializeWinIo();
extern int GetPortVal(WORD wPortAddr, PDWORD pdwPortVal, BYTE bSize);
extern int SetPortVal(WORD wPortAddr, DWORD dwPortVal, BYTE bSize);
extern int ShutdownWinIo();
int WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
HINSTANCE hinst;
hinst=LoadLibrary(L"WinIo64.dll");
typedef int (_stdcall *keypress)();
typedef int (_stdcall *getkey)(WORD wPortAddr, PDWORD pdwPortVal, BYTE bSize);
typedef int (_stdcall *sendkey)(WORD wPortAddr, DWORD dwPortVal, BYTE bSize);
typedef int (_stdcall *quit)();
PDWORD word=0;
keypress keyfunc=(keypress)GetProcAddress(hinst,"InitializeWinIo");
getkey key1=(getkey)GetProcAddress(hinst,"GetPortVal");
sendkey key2=(sendkey)GetProcAddress(hinst,"SetPortVal");
quit qui=(quit)GetProcAddress(hinst,"ShutdownWinIo");
if(!keyfunc)
MessageBox(NULL,L"InitializeWinIo faild",NULL,NULL);
if(!key1)
MessageBox(NULL,L"GetPortVal",NULL,NULL);
if(!key2)
MessageBox(NULL,L"SetPortVal",NULL,NULL);
if(!qui)
MessageBox(NULL,L"ShutdownWinIo",NULL,NULL);
InitializeWinIo();
GetPortVal(0x64,word, 1);
if(!((long)word & 0x2))
{
int o;
o=MapVirtualKey(0x45,0);
SetPortVal(0x64,0xD2, 1);
GetPortVal(0x64,word, 1);
if(!((long)word & 0x2))
{
SetPortVal(0x60,o, 1);
ShutdownWinIo();
}
}
}
错误如下:
1>------ 已启动生成: 项目: Win32Project2, 配置: Debug x64 ------
1> key.cpp
1>key.obj : error LNK2019: 无法解析的外部符号 "int __cdecl InitializeWinIo(void)" (?InitializeWinIo@@YAHXZ),该符号在函数 WinMain 中被引用
1>key.obj : error LNK2019: 无法解析的外部符号 "int __cdecl GetPortVal(unsigned short,unsigned long *,unsigned char)" (?GetPortVal@@YAHGPEAKE@Z),该符号在函数 WinMain 中被引用
1>key.obj : error LNK2019: 无法解析的外部符号 "int __cdecl SetPortVal(unsigned short,unsigned long,unsigned char)" (?SetPortVal@@YAHGKE@Z),该符号在函数 WinMain 中被引用
1>key.obj : error LNK2019: 无法解析的外部符号 "int __cdecl ShutdownWinIo(void)" (?ShutdownWinIo@@YAHXZ),该符号在函数 WinMain 中被引用
1>d:\administrator\documents\visual studio 2012\Projects\Win32Project2\x64\Debug\Win32Project2.exe : fatal error LNK1120: 4 个无法解析的外部命令
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ========== 展开
#include<Windows.h>
extern int InitializeWinIo();
extern int GetPortVal(WORD wPortAddr, PDWORD pdwPortVal, BYTE bSize);
extern int SetPortVal(WORD wPortAddr, DWORD dwPortVal, BYTE bSize);
extern int ShutdownWinIo();
int WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
HINSTANCE hinst;
hinst=LoadLibrary(L"WinIo64.dll");
typedef int (_stdcall *keypress)();
typedef int (_stdcall *getkey)(WORD wPortAddr, PDWORD pdwPortVal, BYTE bSize);
typedef int (_stdcall *sendkey)(WORD wPortAddr, DWORD dwPortVal, BYTE bSize);
typedef int (_stdcall *quit)();
PDWORD word=0;
keypress keyfunc=(keypress)GetProcAddress(hinst,"InitializeWinIo");
getkey key1=(getkey)GetProcAddress(hinst,"GetPortVal");
sendkey key2=(sendkey)GetProcAddress(hinst,"SetPortVal");
quit qui=(quit)GetProcAddress(hinst,"ShutdownWinIo");
if(!keyfunc)
MessageBox(NULL,L"InitializeWinIo faild",NULL,NULL);
if(!key1)
MessageBox(NULL,L"GetPortVal",NULL,NULL);
if(!key2)
MessageBox(NULL,L"SetPortVal",NULL,NULL);
if(!qui)
MessageBox(NULL,L"ShutdownWinIo",NULL,NULL);
InitializeWinIo();
GetPortVal(0x64,word, 1);
if(!((long)word & 0x2))
{
int o;
o=MapVirtualKey(0x45,0);
SetPortVal(0x64,0xD2, 1);
GetPortVal(0x64,word, 1);
if(!((long)word & 0x2))
{
SetPortVal(0x60,o, 1);
ShutdownWinIo();
}
}
}
错误如下:
1>------ 已启动生成: 项目: Win32Project2, 配置: Debug x64 ------
1> key.cpp
1>key.obj : error LNK2019: 无法解析的外部符号 "int __cdecl InitializeWinIo(void)" (?InitializeWinIo@@YAHXZ),该符号在函数 WinMain 中被引用
1>key.obj : error LNK2019: 无法解析的外部符号 "int __cdecl GetPortVal(unsigned short,unsigned long *,unsigned char)" (?GetPortVal@@YAHGPEAKE@Z),该符号在函数 WinMain 中被引用
1>key.obj : error LNK2019: 无法解析的外部符号 "int __cdecl SetPortVal(unsigned short,unsigned long,unsigned char)" (?SetPortVal@@YAHGKE@Z),该符号在函数 WinMain 中被引用
1>key.obj : error LNK2019: 无法解析的外部符号 "int __cdecl ShutdownWinIo(void)" (?ShutdownWinIo@@YAHXZ),该符号在函数 WinMain 中被引用
1>d:\administrator\documents\visual studio 2012\Projects\Win32Project2\x64\Debug\Win32Project2.exe : fatal error LNK1120: 4 个无法解析的外部命令
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ========== 展开
展开全部
你没有把win64Io.dll的头文件引入。。。
extern int InitializeWinIo();
extern int GetPortVal(WORD wPortAddr, PDWORD pdwPortVal, BYTE bSize);
extern int SetPortVal(WORD wPortAddr, DWORD dwPortVal, BYTE bSize);
extern int ShutdownWinIo();
都为外部模块定义,没有头文件 链接不了dll
extern int InitializeWinIo();
extern int GetPortVal(WORD wPortAddr, PDWORD pdwPortVal, BYTE bSize);
extern int SetPortVal(WORD wPortAddr, DWORD dwPortVal, BYTE bSize);
extern int ShutdownWinIo();
都为外部模块定义,没有头文件 链接不了dll
更多追问追答
追问
谢谢你的回答,我已尝试加了个头文件并把这些定义都写了进去,结果还是一样的错误(不知为什么)。win64Io.dll是网上免费的组件,没提供头文件,得自己写。
追答
没有头文件啊。。。
手动导入吧
LoadLibrary("路径/win64Io.dll");
这样可以使用动态库的外部符号
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询