【发布时间】:2013-11-20 22:47:40
【问题描述】:
我正在尝试使用 IBM 的 EHLLAPI 与他们的 Personal Communicator Terminal Emulator 进行交互。我已经从this page 复制了他们的示例代码,但是当我尝试构建它时它给了我一个错误。
1>------ Build started: Project: PCOMAPI, Configuration: Debug Win32 ------
1> Source.cpp
1>Source.obj : error LNK2019: unresolved external symbol _hllapi@16 referenced in function _main
1>C:\Users\[username]\Documents\Visual Studio 2013\Projects\VPARSAPI\Debug\PCOMAPI.exe : fatal error LNK1120: 1 unresolved externals
我不完全确定这个 _hllapi@16 是什么,而且我没有在代码中看到它。自从我使用 C++ 以来已经有一段时间了,所以它可能是我缺少的一些简单的东西。代码如下:
#include <stdlib.h>
#include <stdio.h>
#include <windows.h>
#include "hapi_c.h"
int main(char **argv, int argc) {
int HFunc, HLen, HRc;
char HBuff[1];
struct HLDConnectPS ConnBuff;
// Send Key string for HOME+string+ENTER:
char SendString[] = "@0Hello World!@E";
HFunc = HA_RESET_SYSTEM;
HLen = 0;
HRc = 0;
hllapi(&HFunc, HBuff, &HLen, &HRc);
if (HRc != HARC_SUCCESS) {
printf("Unable to access EHLLAPI.\n");
return 1;
}
HFunc = HA_CONNECT_PS;
HLen = sizeof(ConnBuff);
HRc = 0;
memset(&ConnBuff, 0x00, sizeof(ConnBuff));
ConnBuff.stps_shortname = 'A';
hllapi(&HFunc, (char *)&ConnBuff, &HLen, &HRc);
switch (HRc) {
case HARC_SUCCESS:
case HARC_BUSY:
case HARC_LOCKED: // All these are OK
break;
case HARC_INVALID_PS:
printf("Host session A does not exist.\n");
return 1;
case HARC_UNAVAILABLE:
printf("Host session A is in use by another EHLLAPI application.\n");
return 1;
case HARC_SYSTEM_ERROR:
printf("System error connecting to session A.\n");
return 1;
default:
printf("Error connecting to session A.\n");
return 1;
}
HFunc = HA_SENDKEY;
HLen = strlen(SendString);
HRc = 0;
hllapi(&HFunc, SendString, &HLen, &HRc);
switch (HRc) {
case HARC_SUCCESS:
break;
case HARC_BUSY:
case HARC_LOCKED:
printf("Send failed, host session locked or busy.\n");
break;
default:
printf("Send failed.\n");
break;
}
HFunc = HA_DISCONNECT_PS;
HLen = 0;
HRc = 0;
hllapi(&HFunc, HBuff, &HLen, &HRc);
printf("EHLLAPI program ended.\n");
return 0;
}
我的链接器标志是:
- /OUT:"C:\Users[用户名]\Documents\Visual Studio 2013\Projects\VPARSAPI\Debug\PCOMAPI.exe" /MANIFEST /NXCOMPAT
- /PDB:"C:\Users[用户名]\Documents\Visual Studio
- 2013\Projects\VPARSAPI\Debug\PCOMAPI.pdb" /DYNAMICBASE "kernel32.lib"
- “user32.lib”“gdi32.lib”“winspool.lib”“comdlg32.lib”“advapi32.lib”
- “shell32.lib”“ole32.lib”“oleaut32.lib”“uuid.lib”“odbc32.lib”
- "odbccp32.lib" /DEBUG /MACHINE:X86 /INCREMENTAL
- /PGD:"C:\Users[用户名]\Documents\Visual Studio2013\Projects\VPARSAPI\Debug\PCOMAPI.pgd" /SUBSYSTEM:CONSOLE
- /MANIFESTUAC:"level='asInvoker' uiAccess='false'"
- /ManifestFile:"Debug\PCOMAPI.exe.intermediate.manifest"
- /ERRORREPORT:PROMPT /NOLOGO /TLBID:1
【问题讨论】:
-
“未解析的外部符号”始终是链接器错误。你的链接器标志是什么?
-
@abiessu 我已将我的链接器标志编辑到问题中......我认为
-
_hllapi@16是您在代码中立即可见的hllapi函数。但是您从未从任何地方链接该函数的实际定义。必须有某种你应该使用的 HLLAPI 库。我在您的链接器参数列表中看不到任何类似于 HLLAPI 库的内容。 -
我不熟悉 EHLLAPI,但我在链接器选项中没有看到任何 EHLLAPI 库。不应该至少有一个吗?