Почему я получаю сообщение «неразрешенный внешний символ»?

0

Я пытаюсь использовать IBM EHLLAPI для взаимодействия с их эмулятором терминала Personal Communicator. Я скопировал их пример кода с этой страницы, но это дает мне ошибку, когда я пытаюсь ее построить.

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
  • 0
    «неразрешенный внешний символ» всегда является ошибкой компоновщика. Каковы ваши флаги компоновщика?
  • 0
    @abiessu Я отредактировал свои флаги компоновщика в вопросе ... Я думаю,
Показать ещё 2 комментария
Теги:

2 ответа

2
Лучший ответ

Это ошибка компоновщика. Вам нужно передать в компоновщик файл.lib, библиотеку импорта, для библиотеки EHLLAPI.

Фактически, глядя на документацию, в этой библиотеке есть множество файлов.lib. Вы должны тщательно изучить документацию, чтобы определить, какие из них вам нужны.

  • 0
    Ах, спасибо! Это избавило от этой ошибки, но теперь я получаю 1>LINK : fatal error LNK1104: cannot open file 'EHLAPI32.lib' . Я добавил его в поле «Дополнительные зависимости» и добавил его путь в поле «Дополнительные каталоги библиотек».
  • 0
    Я думаю, что файл не может быть найден. Вы загрузили один из примеров, чтобы посмотреть, как он настроен?
Показать ещё 3 комментария
0

Как указано в разделе " Компиляция и связывание", вы должны включить pcscal32.lib для статического связывания, поэтому символы в * hapi_c.h * могут быть разрешены.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню