- PR -

【C++】JSProxy.dllを用いてのプロキシ情報取得

1
投稿者投稿内容
ミック
会議室デビュー日: 2006/08/15
投稿数: 5
投稿日時: 2008-09-29 17:20
お世話になります。

現在、C++で作成したdllによってプロキシ情報を取得するプログラムを作成しております。
WindowsAPIのJSProxy.dll内に存在する「InternetGetProxyInfo」関数を使用すれば
プロキシサーバのアドレスが取得できるのではないかと思い組み込んでいるのですが
実行するとエラーが発生し値が取得できません。


開発環境
VC++.NET2003
WindowsXP Professional Service Pack 2

なお、以下のようなコードで記述しております。
//********************************************************************************
#include "stdafx.h"
#include <string>
#include <windows.h>
#include <stdio.h>


#using <mscorlib.dll>

using namespace System;
using namespace std;

typedef BOOL (WINAPI *GETINTERNETINFO)(LPCSTR,DWORD,LPSTR,DWORD,LPSTR,LPDWORD);

int _tmain()
{
//InternetGetProxyInfoの読み込みと実行
HMODULE hDll2 = LoadLibrary("JSProxy.dll");

GETINTERNETINFO getnetinfo;
getnetinfo = (GETINTERNETINFO)::GetProcAddress( hDll2, "InternetGetProxyInfo" );

LPCSTR conurl;
LPSTR domailurl,proxyadrs;
DWORD conurlcnt,domailurlcnt;
LPDWORD proxycnt;

if(getnetinfo == NULL){
return 1;
FreeLibrary(hDll2);
}else{
conurl = (LPCSTR)"http://www.yahoo.co.jp";
conurlcnt = (DWORD)22;
domailurl = (LPCSTR)"yahoo.co.jp";
domailurlcnt = (DWORD)15;
proxyadrs = (LPSTR)"";
proxycnt = (LPDWORD)0;
try {
BOOL flag;
//この部分でエラーが発生し結果が返ってきません
flag = (getnetinfo)(conurl,conurlcnt,domailurl,domailurlcnt,proxyadrs,proxycnt);
}
catch (...) {
DWORD errcd,errmsg;
//エラーコードは2が返ってきています
errcd = GetLastError();
errmsg = errcd;
}

FreeLibrary(hDll2);
}
return 0;
}
//********************************************************************************


エラーコードが2で調べた所「指定されたファイルが見つかりません。」というエラーのようですが
何が原因なのかまったくわからず非常に悩んでおります。
もし、お分かりの方がいらっしゃいましたらご教授お願い致します。
ぽぴ王子
ぬし
会議室デビュー日: 2006/03/24
投稿数: 475
お住まい・勤務地: お住まい:城・勤務地:城
投稿日時: 2008-09-29 18:29
引用:

ミックさんの書き込み (2008-09-29 17:20) より:

現在、C++で作成したdllによってプロキシ情報を取得するプログラムを作成しております。
WindowsAPIのJSProxy.dll内に存在する「InternetGetProxyInfo」関数を使用すれば
プロキシサーバのアドレスが取得できるのではないかと思い組み込んでいるのですが
実行するとエラーが発生し値が取得できません。


C++ は門外漢なので外しているかもしれませんが、MSDN の解説 (microsoft.com) によれば、InternetGetProxyInfo 関数の定義は以下のようになっています。

コード:

BOOL InternetGetProxyInfo(
  __in   LPCSTR lpszUrl,
  __in   DWORD dwUrlLength,
  __in   LPSTR lpszUrlHostName,
  __in   DWORD dwUrlHostNameLength,
  __out  LPSTR *lplpszProxyHostName,
  __out  LPDWORD lpdwProxyHostNameLength
);


提示していただいたソースを見る限り、*lplpszProxyHostName が LPCSTR* ではなく LPCSTR で定義されているようですが、関係ありますでしょうか。
ちなみにコードを提示するときは BBCODE を使用すると良いです(タブをスペースに変換することも忘れずに)。
_________________
ぽぴ王子@わんくま同盟
ぽぴ王子の人生プログラミング中 / ぽぴンち。
ミック
会議室デビュー日: 2006/08/15
投稿数: 5
投稿日時: 2008-09-30 11:11
お返事ありがとうございます。

BOOL InternetGetProxyInfo(
__in LPCSTR lpszUrl,
__in DWORD dwUrlLength,
__in LPSTR lpszUrlHostName,
__in DWORD dwUrlHostNameLength,
__out LPSTR *lplpszProxyHostName,
__out LPDWORD lpdwProxyHostNameLength
);

内の*lplpszProxyHostNameへの引数の渡し方が確かに
LPSTR* ではなく LPSTR でしたのでその部分を変更し実行したのですが
結果としてはtrueが返ってきているのにlplpszProxyHostName内に
プロキシサーバのアドレスが入ってきません。
このAPI自体が正常に動作するのかもわからないため、この結果になってしまうのかが
不明です。

もし、解決法をご存知の方がいらっしゃいましたらご教授のほどよろしくお願い致します。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2008-09-30 11:56
DetectAutoProxyUrl が先じゃない?
http://msdn.microsoft.com/en-us/library/aa383910(VS.85).aspx
1

スキルアップ/キャリアアップ(JOB@IT)