0

IBM の EHLLAPI を使用して、IBM のパーソナル コミュニケーター ターミナル エミュレーターとやり取りしようとしています。このページからサンプル コードをコピーしましたが、ビルドしようとするとエラーが発生します。

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"
  • /エラーレポート:プロンプト /NOLOGO /TLBID:1
4

2 に答える 2

2

それはリンカーエラーです。EHLLAPI ライブラリーのインポート・ライブラリーである .lib ファイルをリンカーに渡す必要があります。

実際、ドキュメントを見ると、このライブラリには多数の .lib ファイルがあります。どのドキュメントが必要かを判断するには、ドキュメントを注意深く調べる必要があります。

于 2013-11-20T23:01:57.867 に答える
0

コンパイルとリンクのセクションで述べたように、静的リンク用にpcscal32.libを含める必要があるため、*hapi_c.h* 内のシンボルを解決できます。

于 2013-11-20T23:07:07.693 に答える