WinSOCKを使ってPOST送信
WinSOCKを使ってPOST送信
コマンドからIDを受け取り、それをWinMAIN側に送信するように改良したいのですが、エラーがでて、よくわかりません。
どこがおかしいのでしょうか?
元のソースはここのを使っています。
http://eternalwindows.jp/network/winhttp/winhttp02.html
#include <windows.h>
#include <winhttp.h>
#pragma comment (lib, "winhttp.lib")
int main(){
char id[10];
printf("IDを入力してくれ\n");
scanf("%s",id);
_test(id);
}
//int _test(HINSTANCE hinst, HINSTANCE hinstPrev, LPSTR lpszCmdLine, int nCmdShow)
int _test(TCHAR id)
{
HINTERNET hSession, hConnect, hRequest;
URL_COMPONENTS urlComponents;
WCHAR szHostName[256], szUrlPath[2048];
WCHAR szUrl[] = L"http://eternalwindows.jp/network/winhttp/sample.php";
WCHAR szHeader[] = L"Content-Type: application/x-www-form-urlencoded\r\n";
CHAR szData[256];
// = "msg=abc";
_stprintf(szData,_T("msg=%s",TCHAR id);
DWORD dwHeaderLength = lstrlenW(szHeader);
DWORD dwDataLength = lstrlenA(szData);
DWORD dwTotalLength;
DWORD dwSize;
DWORD dwStatusCode;
BYTE buffer[4096];
hSession = WinHttpOpen(L"Application/1.0", WINHTTP_ACCESS_TYPE_DEFAULT_PROXY, WINHTTP_NO_PROXY_NAME, WINHTTP_NO_PROXY_BYPASS, 0);
if (hSession == NULL)
return 0;
ZeroMemory(&urlComponents, sizeof(URL_COMPONENTS));
urlComponents.dwStructSize = sizeof(URL_COMPONENTS);
urlComponents.lpszHostName = szHostName;
urlComponents.dwHostNameLength = sizeof(szHostName) / sizeof(WCHAR);
urlComponents.lpszUrlPath = szUrlPath;
urlComponents.dwUrlPathLength = sizeof(szUrlPath) / sizeof(WCHAR);
if (!WinHttpCrackUrl(szUrl, lstrlenW(szUrl), 0, &urlComponents)) {
WinHttpCloseHandle(hSession);
return 0;
}
hConnect = WinHttpConnect(hSession, szHostName, INTERNET_DEFAULT_PORT, 0);
if (hConnect == NULL) {
WinHttpCloseHandle(hSession);
return 0;
}
hRequest = WinHttpOpenRequest(hConnect, L"POST", szUrlPath, NULL, WINHTTP_NO_REFERER, WINHTTP_DEFAULT_ACCEPT_TYPES, 0);
if (hRequest == NULL) {
WinHttpCloseHandle(hConnect);
WinHttpCloseHandle(hSession);
return 0;
}
dwTotalLength = dwDataLength;
WinHttpSendRequest(hRequest, szHeader, dwHeaderLength, WINHTTP_NO_REQUEST_DATA, 0, dwTotalLength, 0);
WinHttpWriteData(hRequest, szData, dwDataLength, &dwSize);
WinHttpReceiveResponse(hRequest, NULL);
dwSize = sizeof(DWORD);
WinHttpQueryHeaders(hRequest, WINHTTP_QUERY_STATUS_CODE | WINHTTP_QUERY_FLAG_NUMBER, WINHTTP_HEADER_NAME_BY_INDEX, &dwStatusCode, &dwSize, WINHTTP_NO_HEADER_INDEX);
if (dwStatusCode == HTTP_STATUS_OK) {
WinHttpReadData(hRequest, buffer, sizeof(buffer), NULL);
MessageBoxA(NULL, (LPSTR)buffer, "ボディ", MB_OK);
}
else {
TCHAR szBuf[256];
wsprintf(szBuf, TEXT("Status Code %d"), dwStatusCode);
MessageBox(NULL, szBuf, NULL, MB_ICONWARNING);
}
WinHttpCloseHandle(hRequest);
WinHttpCloseHandle(hConnect);
WinHttpCloseHandle(hSession);
return 0;
}
http.c(33) : error C2059: 構文エラー : '型'
http.c(34) : error C2275: 'DWORD' : この型は演算子として使用できません
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\windef.h(152
) : 'DWORD' の宣言を確認してください。
http.c(34) : error C2146: 構文エラー : ';' が、識別子 'dwHeaderLength' の前に必
要です。
http.c(34) : error C2065: 'dwHeaderLength' : 定義されていない識別子です。
http.c(35) : error C2275: 'DWORD' : この型は演算子として使用できません
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\windef.h(152
) : 'DWORD' の宣言を確認してください。
http.c(35) : error C2146: 構文エラー : ';' が、識別子 'dwDataLength' の前に必要
です。
http.c(35) : error C2065: 'dwDataLength' : 定義されていない識別子です。
http.c(36) : error C2275: 'DWORD' : この型は演算子として使用できません
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\windef.h(152
) : 'DWORD' の宣言を確認してください。
どこがおかしいのでしょうか?
元のソースはここのを使っています。
http://eternalwindows.jp/network/winhttp/winhttp02.html
#include <windows.h>
#include <winhttp.h>
#pragma comment (lib, "winhttp.lib")
int main(){
char id[10];
printf("IDを入力してくれ\n");
scanf("%s",id);
_test(id);
}
//int _test(HINSTANCE hinst, HINSTANCE hinstPrev, LPSTR lpszCmdLine, int nCmdShow)
int _test(TCHAR id)
{
HINTERNET hSession, hConnect, hRequest;
URL_COMPONENTS urlComponents;
WCHAR szHostName[256], szUrlPath[2048];
WCHAR szUrl[] = L"http://eternalwindows.jp/network/winhttp/sample.php";
WCHAR szHeader[] = L"Content-Type: application/x-www-form-urlencoded\r\n";
CHAR szData[256];
// = "msg=abc";
_stprintf(szData,_T("msg=%s",TCHAR id);
DWORD dwHeaderLength = lstrlenW(szHeader);
DWORD dwDataLength = lstrlenA(szData);
DWORD dwTotalLength;
DWORD dwSize;
DWORD dwStatusCode;
BYTE buffer[4096];
hSession = WinHttpOpen(L"Application/1.0", WINHTTP_ACCESS_TYPE_DEFAULT_PROXY, WINHTTP_NO_PROXY_NAME, WINHTTP_NO_PROXY_BYPASS, 0);
if (hSession == NULL)
return 0;
ZeroMemory(&urlComponents, sizeof(URL_COMPONENTS));
urlComponents.dwStructSize = sizeof(URL_COMPONENTS);
urlComponents.lpszHostName = szHostName;
urlComponents.dwHostNameLength = sizeof(szHostName) / sizeof(WCHAR);
urlComponents.lpszUrlPath = szUrlPath;
urlComponents.dwUrlPathLength = sizeof(szUrlPath) / sizeof(WCHAR);
if (!WinHttpCrackUrl(szUrl, lstrlenW(szUrl), 0, &urlComponents)) {
WinHttpCloseHandle(hSession);
return 0;
}
hConnect = WinHttpConnect(hSession, szHostName, INTERNET_DEFAULT_PORT, 0);
if (hConnect == NULL) {
WinHttpCloseHandle(hSession);
return 0;
}
hRequest = WinHttpOpenRequest(hConnect, L"POST", szUrlPath, NULL, WINHTTP_NO_REFERER, WINHTTP_DEFAULT_ACCEPT_TYPES, 0);
if (hRequest == NULL) {
WinHttpCloseHandle(hConnect);
WinHttpCloseHandle(hSession);
return 0;
}
dwTotalLength = dwDataLength;
WinHttpSendRequest(hRequest, szHeader, dwHeaderLength, WINHTTP_NO_REQUEST_DATA, 0, dwTotalLength, 0);
WinHttpWriteData(hRequest, szData, dwDataLength, &dwSize);
WinHttpReceiveResponse(hRequest, NULL);
dwSize = sizeof(DWORD);
WinHttpQueryHeaders(hRequest, WINHTTP_QUERY_STATUS_CODE | WINHTTP_QUERY_FLAG_NUMBER, WINHTTP_HEADER_NAME_BY_INDEX, &dwStatusCode, &dwSize, WINHTTP_NO_HEADER_INDEX);
if (dwStatusCode == HTTP_STATUS_OK) {
WinHttpReadData(hRequest, buffer, sizeof(buffer), NULL);
MessageBoxA(NULL, (LPSTR)buffer, "ボディ", MB_OK);
}
else {
TCHAR szBuf[256];
wsprintf(szBuf, TEXT("Status Code %d"), dwStatusCode);
MessageBox(NULL, szBuf, NULL, MB_ICONWARNING);
}
WinHttpCloseHandle(hRequest);
WinHttpCloseHandle(hConnect);
WinHttpCloseHandle(hSession);
return 0;
}
http.c(33) : error C2059: 構文エラー : '型'
http.c(34) : error C2275: 'DWORD' : この型は演算子として使用できません
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\windef.h(152
) : 'DWORD' の宣言を確認してください。
http.c(34) : error C2146: 構文エラー : ';' が、識別子 'dwHeaderLength' の前に必
要です。
http.c(34) : error C2065: 'dwHeaderLength' : 定義されていない識別子です。
http.c(35) : error C2275: 'DWORD' : この型は演算子として使用できません
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\windef.h(152
) : 'DWORD' の宣言を確認してください。
http.c(35) : error C2146: 構文エラー : ';' が、識別子 'dwDataLength' の前に必要
です。
http.c(35) : error C2065: 'dwDataLength' : 定義されていない識別子です。
http.c(36) : error C2275: 'DWORD' : この型は演算子として使用できません
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\windef.h(152
) : 'DWORD' の宣言を確認してください。
- bitter_fox
- 記事: 607
- 登録日時: 14年前
- 住所: 大阪府
Re: WinSOCKを使ってPOST送信
_stprintf(szData,_T("msg=%s",TCHAR id));
この1行があると、
http.c(41) : error C2275: 'DWORD' : この型は演算子として使用できません
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\windef.h(152
) : 'DWORD' の宣言を確認してください。
http.c(41) : error C2146: 構文エラー : ';' が、識別子 'dwHeaderLength' の前に必
要です。
http.c(41) : error C2065: 'dwHeaderLength' : 定義されていない識別子です。
http.c(42) : error C2275: 'DWORD' : この型は演算子として使用できません
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\windef.h(152
) : 'DWORD' の宣言を確認してください。
http.c(42) : error C2146: 構文エラー : ';' が、識別子 'dwDataLength' の前に必要
です。
http.c(42) : error C2065: 'dwDataLength' : 定義されていない識別子です。
http.c(43) : error C2275: 'DWORD' : この型は演算子として使用できません
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\windef.h(152
) : 'DWORD' の宣言を確認してください。
http.c(43) : error C2146: 構文エラー : ';' が、識別子 'dwTotalLength' の前に必要
です。
http.c(43) : error C2065: 'dwTotalLength' : 定義されていない識別子です。
http.c(44) : error C2275: 'DWORD' : この型は演算子として使用できません
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\windef.h(152
) : 'DWORD' の宣言を確認してください。
http.c(44) : error C2146: 構文エラー : ';' が、識別子 'dwSize' の前に必要です。
http.c(44) : error C2065: 'dwSize' : 定義されていない識別子です。
http.c(45) : error C2275: 'DWORD' : この型は演算子として使用できません
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\windef.h(152
) : 'DWORD' の宣言を確認してください。
http.c(45) : error C2146: 構文エラー : ';' が、識別子 'dwStatusCode' の前に必要
です。
http.c(45) : error C2065: 'dwStatusCode' : 定義されていない識別子です。
http.c(46) : error C2275: 'BYTE' : この型は演算子として使用できません
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\windef.h(154
) : 'BYTE' の宣言を確認してください。
http.c(46) : error C2146: 構文エラー : ';' が、識別子 'buffer' の前に必要です。
http.c(46) : error C2065: 'buffer' : 定義されていない識別子です。
http.c(46) : error C2109: 配列または、ポインターでない変数に添字が使われました。
http.c(77) : error C2065: 'dwTotalLength' : 定義されていない識別子です。
http.c(77) : error C2065: 'dwDataLength' : 定義されていない識別子です。
http.c(78) : error C2065: 'dwHeaderLength' : 定義されていない識別子です。
http.c(78) : error C2065: 'dwTotalLength' : 定義されていない識別子です。
http.c(79) : error C2065: 'dwDataLength' : 定義されていない識別子です。
http.c(79) : error C2065: 'dwSize' : 定義されていない識別子です。
http.c(83) : error C2065: 'dwSize' : 定義されていない識別子です。
http.c(84) : error C2065: 'dwStatusCode' : 定義されていない識別子です。
http.c(84) : error C2065: 'dwSize' : 定義されていない識別子です。
http.c(85) : error C2065: 'dwStatusCode' : 定義されていない識別子です。
http.c(86) : error C2065: 'buffer' : 定義されていない識別子です。
http.c(86) : warning C4022: 'WinHttpReadData' : 2 番目の実引数のポインターの型が
、仮引数のポインターの型と異なります。
http.c(86) : error C2065: 'buffer' : 定義されていない識別子です。
http.c(87) : error C2065: 'buffer' : 定義されていない識別子です。
http.c(91) : error C2065: 'dwStatusCode' : 定義されていない識別子です。
こんだけエラーがでます。
コメントアウトすると、エラーが消えました。
いったいなぜでしょうか。・・・・
この1行があると、
http.c(41) : error C2275: 'DWORD' : この型は演算子として使用できません
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\windef.h(152
) : 'DWORD' の宣言を確認してください。
http.c(41) : error C2146: 構文エラー : ';' が、識別子 'dwHeaderLength' の前に必
要です。
http.c(41) : error C2065: 'dwHeaderLength' : 定義されていない識別子です。
http.c(42) : error C2275: 'DWORD' : この型は演算子として使用できません
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\windef.h(152
) : 'DWORD' の宣言を確認してください。
http.c(42) : error C2146: 構文エラー : ';' が、識別子 'dwDataLength' の前に必要
です。
http.c(42) : error C2065: 'dwDataLength' : 定義されていない識別子です。
http.c(43) : error C2275: 'DWORD' : この型は演算子として使用できません
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\windef.h(152
) : 'DWORD' の宣言を確認してください。
http.c(43) : error C2146: 構文エラー : ';' が、識別子 'dwTotalLength' の前に必要
です。
http.c(43) : error C2065: 'dwTotalLength' : 定義されていない識別子です。
http.c(44) : error C2275: 'DWORD' : この型は演算子として使用できません
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\windef.h(152
) : 'DWORD' の宣言を確認してください。
http.c(44) : error C2146: 構文エラー : ';' が、識別子 'dwSize' の前に必要です。
http.c(44) : error C2065: 'dwSize' : 定義されていない識別子です。
http.c(45) : error C2275: 'DWORD' : この型は演算子として使用できません
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\windef.h(152
) : 'DWORD' の宣言を確認してください。
http.c(45) : error C2146: 構文エラー : ';' が、識別子 'dwStatusCode' の前に必要
です。
http.c(45) : error C2065: 'dwStatusCode' : 定義されていない識別子です。
http.c(46) : error C2275: 'BYTE' : この型は演算子として使用できません
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\windef.h(154
) : 'BYTE' の宣言を確認してください。
http.c(46) : error C2146: 構文エラー : ';' が、識別子 'buffer' の前に必要です。
http.c(46) : error C2065: 'buffer' : 定義されていない識別子です。
http.c(46) : error C2109: 配列または、ポインターでない変数に添字が使われました。
http.c(77) : error C2065: 'dwTotalLength' : 定義されていない識別子です。
http.c(77) : error C2065: 'dwDataLength' : 定義されていない識別子です。
http.c(78) : error C2065: 'dwHeaderLength' : 定義されていない識別子です。
http.c(78) : error C2065: 'dwTotalLength' : 定義されていない識別子です。
http.c(79) : error C2065: 'dwDataLength' : 定義されていない識別子です。
http.c(79) : error C2065: 'dwSize' : 定義されていない識別子です。
http.c(83) : error C2065: 'dwSize' : 定義されていない識別子です。
http.c(84) : error C2065: 'dwStatusCode' : 定義されていない識別子です。
http.c(84) : error C2065: 'dwSize' : 定義されていない識別子です。
http.c(85) : error C2065: 'dwStatusCode' : 定義されていない識別子です。
http.c(86) : error C2065: 'buffer' : 定義されていない識別子です。
http.c(86) : warning C4022: 'WinHttpReadData' : 2 番目の実引数のポインターの型が
、仮引数のポインターの型と異なります。
http.c(86) : error C2065: 'buffer' : 定義されていない識別子です。
http.c(87) : error C2065: 'buffer' : 定義されていない識別子です。
http.c(91) : error C2065: 'dwStatusCode' : 定義されていない識別子です。
こんだけエラーがでます。
コメントアウトすると、エラーが消えました。
いったいなぜでしょうか。・・・・
- bitter_fox
- 記事: 607
- 登録日時: 14年前
- 住所: 大阪府
Re: WinSOCKを使ってPOST送信
あ~、C言語としてコンパイルしてますね・・・
ファイルの拡張子をcppに変更してコンパイルするか、次のように変更してください。
[hr][追記]
なぜかと言いますと、C言語では常にローカル変数の宣言は関数の一番上に固まってないとダメというルールがあります。
今回は、stprintfの呼び出しが間に入ってこのルールを破ってしまったからです。
一方、C++では、関数内のどこに宣言してもよい(当然使用される時点よりも前である必要がありますが・・・)ため間に関数の呼び出しがあったとしても問題になりません。
[編集]
stprintfを修正
ファイルの拡張子をcppに変更してコンパイルするか、次のように変更してください。
int _test(TCHAR id)
{
HINTERNET hSession, hConnect, hRequest;
URL_COMPONENTS urlComponents;
WCHAR szHostName[256], szUrlPath[2048];
WCHAR szUrl[] = L"http://eternalwindows.jp/network/winhttp/sample.php";
WCHAR szHeader[] = L"Content-Type: application/x-www-form-urlencoded\r\n";
CHAR szData[256];
// = "msg=abc";
DWORD dwHeaderLength = lstrlenW(szHeader);
DWORD dwDataLength;
DWORD dwTotalLength;
DWORD dwSize;
DWORD dwStatusCode;
BYTE buffer[4096];
_stprintf(szData,_T("msg=%s"), id);
dwDataLength = lstrlenA(szData);
(略)
なぜかと言いますと、C言語では常にローカル変数の宣言は関数の一番上に固まってないとダメというルールがあります。
今回は、stprintfの呼び出しが間に入ってこのルールを破ってしまったからです。
一方、C++では、関数内のどこに宣言してもよい(当然使用される時点よりも前である必要がありますが・・・)ため間に関数の呼び出しがあったとしても問題になりません。
[編集]
stprintfを修正
最後に編集したユーザー bitter_fox on 2011年1月10日(月) 10:53 [ 編集 1 回目 ]
Re: WinSOCKを使ってPOST送信
エラーが急激にへりました 。
C:\>cl http.c
Microsoft(R) 32-bit C/C++ Optimizing Compiler Version 16.00.30319.01 for 80x86
Copyright (C) Microsoft Corporation. All rights reserved.
http.c
http.c(40) : error C2059: 構文エラー : '型'
型がおかしいのでしょうか・・・
C:\>cl http.c
Microsoft(R) 32-bit C/C++ Optimizing Compiler Version 16.00.30319.01 for 80x86
Copyright (C) Microsoft Corporation. All rights reserved.
http.c
http.c(40) : error C2059: 構文エラー : '型'
型がおかしいのでしょうか・・・
- bitter_fox
- 記事: 607
- 登録日時: 14年前
- 住所: 大阪府
Re: WinSOCKを使ってPOST送信
ありがとうございます。型のエラーはでなくなりました。
とおもったら・・・
今度は未解決の外部シンボルエラーが・・・
なぜでるのでしょうか・・・
http.obj
http.obj : error LNK2019: 未解決の外部シンボル __stprintf が関数 __test で参照さ
れました。
http.obj : error LNK2019: 未解決の外部シンボル __T が関数 __test で参照されまし
た。
http.exe : fatal error LNK1120: 外部参照 2 が未解決です。
とおもったら・・・
今度は未解決の外部シンボルエラーが・・・
なぜでるのでしょうか・・・
http.obj
http.obj : error LNK2019: 未解決の外部シンボル __stprintf が関数 __test で参照さ
れました。
http.obj : error LNK2019: 未解決の外部シンボル __T が関数 __test で参照されまし
た。
http.exe : fatal error LNK1120: 外部参照 2 が未解決です。
- bitter_fox
- 記事: 607
- 登録日時: 14年前
- 住所: 大阪府
Re: WinSOCKを使ってPOST送信
_sprintfに変更してみてください。(ないしはwsprintf)なぎ さんが書きました: http.obj : error LNK2019: 未解決の外部シンボル __stprintf が関数 __test で参照さ
れました。
これは、TEXTに変更してみてください。なぎ さんが書きました:http.obj : error LNK2019: 未解決の外部シンボル __T が関数 __test で参照されまし
た。
Re: WinSOCKを使ってPOST送信
_ sprintf(szData,TEXT("msg=%s"), id);
このままだとエラーはでました。
sprintf(szData,TEXT("msg=%s"), id);
このようにすると、コンパイルエラーはでなくなりました。
実行してIDを入力すると、exeが処理を中断しました
と書いて強制終了します。
sprintf(szData,TEXT("msg=%s"), id);
これだと
何か処理がおかしいのでしょうか・・・
このままだとエラーはでました。
sprintf(szData,TEXT("msg=%s"), id);
このようにすると、コンパイルエラーはでなくなりました。
実行してIDを入力すると、exeが処理を中断しました
と書いて強制終了します。
sprintf(szData,TEXT("msg=%s"), id);
これだと
何か処理がおかしいのでしょうか・・・
- bitter_fox
- 記事: 607
- 登録日時: 14年前
- 住所: 大阪府
Re: WinSOCKを使ってPOST送信
%dは数字で%sが文字列だったような気がしますが・・・
%dにすると無事コンパイルでき、exeはエラーをはかなくなりました。
しかし、実行結果がめちゃくちゃです。
IDに1234を入力すると
-96が入力されました
IDにtestを入力すると80が入力されました
%dにすると無事コンパイルでき、exeはエラーをはかなくなりました。
しかし、実行結果がめちゃくちゃです。
IDに1234を入力すると
-96が入力されました
IDにtestを入力すると80が入力されました
- bitter_fox
- 記事: 607
- 登録日時: 14年前
- 住所: 大阪府
Re: WinSOCKを使ってPOST送信
その通りです。なぎ さんが書きました:%dは数字で%sが文字列だったような気がしますが・・・
えーと、入力は文字列で受け取ってるんですよね??なぎ さんが書きました: しかし、実行結果がめちゃくちゃです。
IDに1234を入力すると
-96が入力されました
IDにtestを入力すると80が入力されました
ですが、test関数に渡してるのは、TCHAEになっています。
test関数に渡したいのは文字列ではないでしょうか??
文字列であれば、引数の型をLPTSTRに変更して、
sprintf(szData, TEXT("msg=%s"), id);
にしてください。
勘違いしてましたorz
Re: WinSOCKを使ってPOST送信
無事できました。ありがとうございました。
int _test(LPTSTR id)
これでよかったんですね。
今回のはサンプルのをそのまま用いてますが、CGIは実際自分で用意します。
実は、作りたかったのは、ネットワーク認証でして、パスワードを入力してください
と書いて、
MessageBoxA(NULL, (LPSTR)buffer, "ボディ", MB_OK);
この部分のbufferに「OK」という文字があれば、認証成功。「NG」とあれば認証失敗
というかんじにしたいわけです。
if (lstrcmp((LPSTR)buffer, TEXT("OK")) == 0)
MessageBox(NULL, TEXT("パスワードは正しいです。"), TEXT("正解"), MB_ICONINFORMATION);
else
MessageBox(NULL, TEXT("パスワードが違います。"), NULL, MB_ICONERROR);
}
こんなのでいいでしょうか?
int _test(LPTSTR id)
これでよかったんですね。
今回のはサンプルのをそのまま用いてますが、CGIは実際自分で用意します。
実は、作りたかったのは、ネットワーク認証でして、パスワードを入力してください
と書いて、
MessageBoxA(NULL, (LPSTR)buffer, "ボディ", MB_OK);
この部分のbufferに「OK」という文字があれば、認証成功。「NG」とあれば認証失敗
というかんじにしたいわけです。
if (lstrcmp((LPSTR)buffer, TEXT("OK")) == 0)
MessageBox(NULL, TEXT("パスワードは正しいです。"), TEXT("正解"), MB_ICONINFORMATION);
else
MessageBox(NULL, TEXT("パスワードが違います。"), NULL, MB_ICONERROR);
}
こんなのでいいでしょうか?
Re: WinSOCKを使ってPOST送信
できました。
最終的には、DLL インジェクションでプログラム起動時にパスワード認証を使おうとおもい、DLL MAinからMain関数を呼び出しました。
BOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)
{
if(ul_reason_for_call == DLL_PROCESS_ATTACH)
{
MessageBoxA(NULL,"DLLテスト","テスト",MB_OK);
CreateThread(0, 0, (LPTHREAD_START_ROUTINE)&main, 0, 0, 0);
}else if(ul_reason_for_call == DLL_THREAD_ATTACH){
}else if(ul_reason_for_call == DLL_THREAD_DETACH){
}
else if(ul_reason_for_call == DLL_PROCESS_DETACH){
}
return TRUE;
}
これでコンパイルしたら、いちおうDLLは完成しました。
そして適当にインジェクトさせてみたのですが、いきなり「パスワードが違います」とでます。
コマンドプロンプトが立ち上がりませんでした。
パスワード入力画面もでないです。
なぜでしょうか・・・
最終的には、DLL インジェクションでプログラム起動時にパスワード認証を使おうとおもい、DLL MAinからMain関数を呼び出しました。
BOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)
{
if(ul_reason_for_call == DLL_PROCESS_ATTACH)
{
MessageBoxA(NULL,"DLLテスト","テスト",MB_OK);
CreateThread(0, 0, (LPTHREAD_START_ROUTINE)&main, 0, 0, 0);
}else if(ul_reason_for_call == DLL_THREAD_ATTACH){
}else if(ul_reason_for_call == DLL_THREAD_DETACH){
}
else if(ul_reason_for_call == DLL_PROCESS_DETACH){
}
return TRUE;
}
これでコンパイルしたら、いちおうDLLは完成しました。
そして適当にインジェクトさせてみたのですが、いきなり「パスワードが違います」とでます。
コマンドプロンプトが立ち上がりませんでした。
パスワード入力画面もでないです。
なぜでしょうか・・・