InternetOpenがうまく動かない

解決


けんた  2005-12-18 04:18:00  No: 59962

Visual C++.NET 2003 で InternetOpen関数や
InternetOpenUrl関数、InternetCloseHandle関数が
うまくうごきません
どうしたら動きますか?


RAPT  2005-12-18 07:14:24  No: 59963

>うまくうごきません
とは?
MFC/managed/unmanaged/などとか、
どんなコードを書いて、どうなったとか、
エラーチェックした結果から、どう判断したかとか、
諸々。


けんた  2005-12-18 07:20:24  No: 59964

猫でもわかるネットワークプログラミングと
いう本のサンプルコード、

// readhtml.c

#include <windows.h>
#include <stdio.h>
#include <wininet.h>

int main()
{
  HINTERNET hInet, hUrl;
  char szBuf[128], szUrl[128], *lpszSrc;
  DWORD dwRead, dwTotal = 0;
  HGLOBAL hMem;

  //目的のURLの入力
  printf("URL--- ");
  gets(szUrl);

  //インターネット(WinInet)開始
  hInet = InternetOpen("nekodemo-wakaru",
    INTERNET_OPEN_TYPE_PRECONFIG,  
    NULL, NULL, 0);
  if (hInet == NULL) {
    perror("オープンエラー\n");
    return -2;
  }
  //HTTPセッションの開始, 指定のURLオープン
  hUrl = InternetOpenUrl(hInet, szUrl, NULL, 0, 0, 0);
  if (hUrl == NULL) {
    perror("URLオープンエラー\n");
    InternetCloseHandle(hInet);
    return -3;
  }

  //lpszSrcに1バイトのみ確保
  hMem = GlobalAlloc(GHND, 1);
  lpszSrc = (char *)GlobalLock(hMem);

  //読み出す物がなくなるまで読み出す
  while (1) {
    InternetReadFile(hUrl, szBuf, (DWORD)sizeof(szBuf) - 1, &dwRead); 
    szBuf[dwRead] = '\0';

    //読み出す物がなくなったのでループ脱出
    if (dwRead == 0)
      break;

    //必要バイト数の計算
    dwTotal += dwRead;

    //確保領域の大きさ変更
    hMem = GlobalReAlloc(hMem, dwTotal, GMEM_MOVEABLE);
    if (hMem == NULL) {
      perror("再アロケート失敗\n");
    }
    lpszSrc = (char *)GlobalLock(hMem);
    if (lpszSrc == NULL) {
      perror("メモリ確保に失敗\n");
      break;
    }  
    strcat(lpszSrc, szBuf);
  }
  
  //ソースの表示
  printf("%s\n", lpszSrc);

  //メモリの解放
  GlobalUnlock(hMem);
  GlobalFree(hMem);

  //インターネットハンドルの解放
  InternetCloseHandle(hUrl);
  InternetCloseHandle(hInet);

  return 0;
}

をコンパイルしたら

Web_readhtml error LNK2019: 未解決の外部シンボル __imp__InternetCloseHandle@4 が関数 _main で参照されました。
Web_readhtml error LNK2019: 未解決の外部シンボル __imp__InternetOpenA@20 が関数 _main で参照されました。
Web_readhtml error LNK2019: 未解決の外部シンボル __imp__InternetOpenUrlA@24 が関数 _main で参照されました。
Web_readhtml error LNK2019: 未解決の外部シンボル __imp__InternetReadFile@16 が関数 _main で参照されました。
Web_readhtml fatal error LNK1120: 外部参照 4 が未解決です。

というエラーがでてきました


Blue  2005-12-18 08:02:48  No: 59965

wininet.libをリンクしていますか?


RAPT  2005-12-18 12:44:09  No: 59966

>うまくうごきません
とあるから、てっきりランタイムエラーかと思いきや、
リンクエラーなのね・・・


けんた  2005-12-18 19:24:22  No: 59967

wininet.libがどこにあるのか分かりません


瀬戸っぷ  2005-12-18 20:46:51  No: 59968

特にパスを指定する必要はないハズですが。
そのままリンカにwininet.libもリンクするように指定するだけです。
それでもパスが知りたいならばドライブ内のファイルを検索すればよろしいかと。

[プロジェクト]-[〜のプロパティ]-[リンカ]-[入力]-[追加の依存ファイル]で指定です。

# 2005がそのうち出るのに、最近になってVisual Studio .NET 2003入れてみたり。


けんた  2005-12-18 20:55:51  No: 59969

無事 wininet.lib を入れることができました
libをリンクする方法をはじめて知りました
ありがとうございました


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加