デバッグをお願いしたいのですが、、、
Posted: 2009年6月14日(日) 21:47
いくら見ても原因がわかりません。。。
誰かわかりますか??
問題のところはGlobalAlloc()のところです。
デバッグ情報ではちゃんと表示されているし、NULLでもないのにメモリが確保されません。
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include <wininet.h>
#define Enterstop while(1){if (getch()==13) break;}
int main (void)
{
//Variable declaration
HINTERNET hInet,shFile;
LPTSTR buffer;
DWORD dwFree,dwfSize;
HANDLE dhFile;
//Open the URL
hInet=InternetOpen(
"Rewrite",
INTERNET_OPEN_TYPE_PRECONFIG,
NULL,
NULL,
0
);
shFile=InternetOpenUrl(
hInet,
"http://space.geocities.jp/classcircle/rewrite/mylib.c",
NULL,
0,
INTERNET_FLAG_EXISTING_CONNECT|INTERNET_FLAG_RELOAD,
0
);
//Get file size
dwFree=sizeof(dwfSize);
HttpQueryInfo(
shFile,
HTTP_QUERY_CONTENT_LENGTH|HTTP_QUERY_FLAG_NUMBER,
&dwfSize,
&dwFree,
0
);
//Secure memories & Load file of Internet
buffer=(LPTSTR)GlobalAlloc(GPTR,sizeof(TCHAR)*(dwfSize+1));
if (sizeof(buffer)<dwfSize)
{
printf("Error %d\n",GetLastError());
printf("Failed secure memories.\n");
if (buffer==NULL) printf("buffer==NULL\n");
printf("dwfSize:sizeof(buffer) = %d:%d\n",dwfSize,sizeof(buffer));
printf("sizeof(LPTSTR) = %d\n",sizeof(LPTSTR));
printf("sizeof(TCHAR)*(dwfSize+1) = %d\n",sizeof(TCHAR)*(dwfSize+1));
Enterstop;
return 1;
}
InternetReadFile(
shFile,
buffer,
sizeof(buffer),
&dwFree
);
//Write to file of local
dhFile=CreateFile(
"\\MyFolder\\Borland\\MyLibrary\\mylib.c",
GENERIC_WRITE,
0,
0,
OPEN_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL
);
WriteFile(dhFile,buffer,sizeof(buffer),&dwFree,NULL);
//Showing user the file
WriteFile(GetStdHandle(STD_OUTPUT_HANDLE),buffer,sizeof(buffer),&dwFree,NULL);
printf("\ndwfSize = %d",dwfSize);
//The disposal of end
InternetCloseHandle(shFile);
InternetCloseHandle(hInet);
CloseHandle(dhFile);
GlobalFree(buffer);
Enterstop;
return 0;
}
誰かわかりますか??
問題のところはGlobalAlloc()のところです。
デバッグ情報ではちゃんと表示されているし、NULLでもないのにメモリが確保されません。
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include <wininet.h>
#define Enterstop while(1){if (getch()==13) break;}
int main (void)
{
//Variable declaration
HINTERNET hInet,shFile;
LPTSTR buffer;
DWORD dwFree,dwfSize;
HANDLE dhFile;
//Open the URL
hInet=InternetOpen(
"Rewrite",
INTERNET_OPEN_TYPE_PRECONFIG,
NULL,
NULL,
0
);
shFile=InternetOpenUrl(
hInet,
"http://space.geocities.jp/classcircle/rewrite/mylib.c",
NULL,
0,
INTERNET_FLAG_EXISTING_CONNECT|INTERNET_FLAG_RELOAD,
0
);
//Get file size
dwFree=sizeof(dwfSize);
HttpQueryInfo(
shFile,
HTTP_QUERY_CONTENT_LENGTH|HTTP_QUERY_FLAG_NUMBER,
&dwfSize,
&dwFree,
0
);
//Secure memories & Load file of Internet
buffer=(LPTSTR)GlobalAlloc(GPTR,sizeof(TCHAR)*(dwfSize+1));
if (sizeof(buffer)<dwfSize)
{
printf("Error %d\n",GetLastError());
printf("Failed secure memories.\n");
if (buffer==NULL) printf("buffer==NULL\n");
printf("dwfSize:sizeof(buffer) = %d:%d\n",dwfSize,sizeof(buffer));
printf("sizeof(LPTSTR) = %d\n",sizeof(LPTSTR));
printf("sizeof(TCHAR)*(dwfSize+1) = %d\n",sizeof(TCHAR)*(dwfSize+1));
Enterstop;
return 1;
}
InternetReadFile(
shFile,
buffer,
sizeof(buffer),
&dwFree
);
//Write to file of local
dhFile=CreateFile(
"\\MyFolder\\Borland\\MyLibrary\\mylib.c",
GENERIC_WRITE,
0,
0,
OPEN_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL
);
WriteFile(dhFile,buffer,sizeof(buffer),&dwFree,NULL);
//Showing user the file
WriteFile(GetStdHandle(STD_OUTPUT_HANDLE),buffer,sizeof(buffer),&dwFree,NULL);
printf("\ndwfSize = %d",dwfSize);
//The disposal of end
InternetCloseHandle(shFile);
InternetCloseHandle(hInet);
CloseHandle(dhFile);
GlobalFree(buffer);
Enterstop;
return 0;
}