2013-11-20 4 views
0

Я пытаюсь использовать 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
+0

«неразрешенный внешний символ» всегда является ошибкой компоновщика. Каковы ваши флагов-компоновщики? – abiessu

+0

@abiessu Я редактировал свои флагов компоновщика в вопрос ... Я думаю, что – SaintWacko

+0

'_hllapi @ 16' - ваша функция' hllapi', которая сразу же отображается в коде. Но вы никогда не связывали фактическое определение этой функции нигде. Должна быть какая-то библиотека HLLAPI, которую вы должны использовать. Я не вижу ничего такого, что выглядела бы как библиотека HLLAPI в списке параметров компоновщика. – AnT

ответ

2

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

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

+0

А, спасибо! Это избавилось от этой ошибки, но теперь я получаю '1> LINK: фатальная ошибка LNK1104: не удается открыть файл EHLAPI32.lib''. Я добавил его в поле Additional Dependencies и добавил свой путь к полю дополнительных библиотек. – SaintWacko

+0

Я думаю, что файл не найден. Загрузили ли вы один из образцов, чтобы увидеть, как это настроено? –

+0

Hm ... Если я добавлю полный путь к дополнительным зависимостям, он будет работать.Я предполагаю, что поле «Дополнительные библиотеки» - это не то, что я думаю. – SaintWacko

0

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

Смежные вопросы