猫でもわかるネットワークプログラミング第2版最初のプログラムについて

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アグルス

猫でもわかるネットワークプログラミング第2版最初のプログラムについて

#1

投稿記事 by アグルス » 12年前

ネットワークプログラミングを勉強しようと思い、猫でもわかるネットワークプログラミングを購入してみましたが、
掲載されていたプログラム(ホームページのソースを読みだすコンソールアプリケーション)がうまく動いてくれません…。

現在はUnicodeなるものが使用されているためにマルチバイト文字セットを使用するようにすれば動く、と検索の結果知ったのですが、
マルチバイト文字セットを使用しても赤のアンダーバーのエラー表示が消えただけで、デバックを実行しようとするとエラーが出ます
エラー内容は以下の通りです。
1>------ ビルド開始: プロジェクト: Test_r, 構成: Debug Win32 ------
1>variable1.obj : error LNK2019: 未解決の外部シンボル __imp__InternetReadFile@16 が関数 _main で参照されました。
1>variable1.obj : error LNK2019: 未解決の外部シンボル __imp__InternetCloseHandle@4 が関数 _main で参照されました。
1>variable1.obj : error LNK2019: 未解決の外部シンボル __imp__InternetOpenUrlA@24 が関数 _main で参照されました。
1>variable1.obj : error LNK2019: 未解決の外部シンボル __imp__InternetOpenA@20 が関数 _main で参照されました。
1>C:\Users\○○○\documents\visual studio 2010\Projects\Test_r\Debug\Test_r.exe : fatal error LNK1120: 外部参照 4 が未解決です。
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========

環境はWindows7、VisualC++2010Expressです。プログラミングの腕については初心者です。
修正すべき点を教えてほしいです。

コード:

#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;
}

//1pszSrcに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+1,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;
}

taketoshi
記事: 222
登録日時: 14年前
住所: 日本国

Re: 猫でもわかるネットワークプログラミング第2版最初のプログラムについて

#2

投稿記事 by taketoshi » 12年前

ヘッダファイルをインクルードするだけでは動きません
関数の実態はWinInet.Libに記述されているのでこのライブラリをプロジェクトに参加させて下さい。

もう少し読み進めるとWinsockの話になりますが
Winsockもヘッダファイルのみではなくライブラリを参加させて下さいね。

アグルス

Re: 猫でもわかるネットワークプログラミング第2版最初のプログラムについて

#3

投稿記事 by アグルス » 12年前

taketoshiさんありがとうございます!
一部の内容が古かったのでてっきりバージョン違いによるものだと思ってしまいました…。気を付けます。

閉鎖

“C言語何でも質問掲示板” へ戻る