掲載されていたプログラム(ホームページのソースを読みだすコンソールアプリケーション)がうまく動いてくれません…。
現在は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;
}