Visual C++.NET 2003 で InternetOpen関数や
InternetOpenUrl関数、InternetCloseHandle関数が
うまくうごきません
どうしたら動きますか?
>うまくうごきません
とは?
MFC/managed/unmanaged/などとか、
どんなコードを書いて、どうなったとか、
エラーチェックした結果から、どう判断したかとか、
諸々。
猫でもわかるネットワークプログラミングと
いう本のサンプルコード、
// 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 が未解決です。
というエラーがでてきました
wininet.libをリンクしていますか?
>うまくうごきません
とあるから、てっきりランタイムエラーかと思いきや、
リンクエラーなのね・・・
wininet.libがどこにあるのか分かりません
特にパスを指定する必要はないハズですが。
そのままリンカにwininet.libもリンクするように指定するだけです。
それでもパスが知りたいならばドライブ内のファイルを検索すればよろしいかと。
[プロジェクト]-[〜のプロパティ]-[リンカ]-[入力]-[追加の依存ファイル]で指定です。
# 2005がそのうち出るのに、最近になってVisual Studio .NET 2003入れてみたり。
無事 wininet.lib を入れることができました
libをリンクする方法をはじめて知りました
ありがとうございました
ツイート | ![]() |