Я пытаюсь использовать EHLLAPI IBM для взаимодействия с их эмулятором терминала Personal Communicator. Я скопировал их пример кода от this page, но он дает мне ошибку, когда я пытаюсь ее построить.Почему я получаю сообщение «неразрешенный внешний символ»?
1>------ Build started: Project: PCOMAPI, Configuration: Debug Win32 ------
1> Source.cpp
1>Source.obj : error LNK2019: unresolved external symbol [email protected] 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 [email protected]";
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»/ МАНИФЕСТ/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"/ОТЛАДКА/МАШИНА : X86/INCREMENTAL
- /PGD: "C: \ Users [имя пользователя] \ Documents \ Визуальная Studio2013 \ Проекты \ VPARSAPI \ Debug \ PCOMAPI.pgd"/SUBSYSTEM: CONSOLE
- /MANIFESTUAC: "уровень = 'asInvoker 'UIAccess =' ложный "
- /ManifestFile:"Debug\PCOMAPI.exe.intermediate.manifest"
- /ERRORREPORT: ПОДСКАЖИТЕ/NOLOGO/TLBID: 1
«неразрешенный внешний символ» всегда является ошибкой компоновщика. Каковы ваши флагов-компоновщики? – abiessu
@abiessu Я редактировал свои флагов компоновщика в вопрос ... Я думаю, что – SaintWacko
'_hllapi @ 16' - ваша функция' hllapi', которая сразу же отображается в коде. Но вы никогда не связывали фактическое определение этой функции нигде. Должна быть какая-то библиотека HLLAPI, которую вы должны использовать. Я не вижу ничего такого, что выглядела бы как библиотека HLLAPI в списке параметров компоновщика. – AnT