SDK(include:IPHlpApi.h,icmpapi.h)でコンパイル不可の事象を回避するには?


TM  2007-03-02 05:02:00  No: 64567

環境
Win2000 VC++ 6.0

自作ping

ソース元
http://www.geekpage.jp/programming/iphlpapi/send-icmp.php
をコンパイルしたいのですが、出来ません。

実施したこと:
①Windows Server 2003 SP1 Platform SDK Web InstallのPSDK-x86.exe
でフルインストール

②C:\Program Files\Microsoft Platform SDKに移動して
SetEnv.cmd /2000 /RETAIL
を実行

③Win32 Console Applicationでプロジェクトを作成

④VC++ 6.0のツール−オプション−ディレクトリタブで以下を設定
インクルードファイル:
C:\PROGRAM FILES\MICROSOFT PLATFORM SDK\INCLUDE
実行可能ファイル:
C:\PROGRAM FILES\MICROSOFT PLATFORM SDK\BIN\WINNT
ライブラリファイル:
C:\PROGRAM FILES\MICROSOFT PLATFORM SDK\LIB

⑤上記ソースをコンパイル
プロジェクト 'お試し - Win32 Release' 用の中間ファイルおよび出力ファイルを削除しています。
--------------------構成: お試し - Win32 Release--------------------
コンパイル中...
sample.c
C:\PROGRAM FILES\MICROSOFT PLATFORM SDK\INCLUDE\IPHlpApi.h(183) : error C2146: 構文エラー : ')' が、識別子 'pStats' の前に必要です。
C:\PROGRAM FILES\MICROSOFT PLATFORM SDK\INCLUDE\IPHlpApi.h(183) : error C2061: 構文エラー : 識別子 'pStats' がシンタックスエラーを起こしました。
C:\PROGRAM FILES\MICROSOFT PLATFORM SDK\INCLUDE\IPHlpApi.h(183) : error C2059: 構文エラー : ';'
C:\PROGRAM FILES\MICROSOFT PLATFORM SDK\INCLUDE\IPHlpApi.h(183) : error C2059: 構文エラー : ','
C:\PROGRAM FILES\MICROSOFT PLATFORM SDK\INCLUDE\IPHlpApi.h(185) : error C2059: 構文エラー : ')'
cl.exe の実行エラー

お試し.exe - エラー 5、警告 0

SDKのインストール方法が、まずかったでしょうか?
すみませんが、お願いします。


かさのば  2007-03-02 08:51:20  No: 64568

libファイルはリンクしましたか?


YuO  2007-03-02 18:38:36  No: 64569

> (1) Windows Server 2003 SP1 Platform SDK Web InstallのPSDK-x86.exe
> でフルインストール

Platform SDKのバージョンは?
VC++ 6.0のサポートは2003年11月版までですが,その点は大丈夫ですか?


TM  2007-03-03 04:33:52  No: 64570

かさのばさん、YuOさんご回答ありがとうございます。

(以下、色々書いていますが、9割あきらめています。。。)

すみません、リンクしておりませんでした。でリンクしようと思ったのですが、
問題が発生しました。

私の環境Platform SDKにicmp.libがありませんでした。
SDKのバージョンに関しては最近のですので全然駄目ですか。
MSDNで調べてみると

http://support.microsoft.com/kb/189120/ja
抜粋:不足するファイルは、次のとおりです。icmplib.lib  - Static Library (Object Library)

downloadしようとしたのですがリンク先にある画面からdownload見つけられない。…困った。

http://support.microsoft.com/default.aspx/kb/170591/ja
抜粋:最近の Platform SDK は icmp.lib のみ含んでいます。icmp.dll 内の関数は Win32 API の一部とは考えられていなく、将来のリリースではサポートされないでしょう。

YuOさんの指摘通り、サポートされなくなったのでということですね?

あきらめずに、grepでIcmpCreateFile等を検索し、
IPHlpApi.Lib WS2_32.Libに関数があるっぽいので
プロジェクトの設定-リンクのオブジェクト/ライブラリモジュールに
IPHlpApi.Lib WS2_32.Libを追加。

EXEの作成が成功しました。
そして、実行すると

プロシージャ エントリ ポイント IcmpCreateFileがダイナミックリンクライブラリ
iphlpapi.dllから見つかりませんでした。

というエラーメッセージが出現
調べてみると
iphlpapi.dllはMicrosoft Platform SDKに存在しなく、
C:\WINNT\system32にありました。
→リンクの設定がおかしい? Or SDKのIPHlpApi.LibとC:\WINNT\system32のiphlpapi.dllの内容が合ってない?

私の環境Platform SDKでソースをコンパイル
は不可能…とういうことですね?
→LoadLibrary("ICMP.DLL")でソース修正の必要?

現状、ソースをいじらずやるのはどうも駄目ですね。(あっています?)

Visual C++ 2005 Express Editionをインストールしても
駄目でしょうね。(icmp.libが無いので)(あっています?)

すみません、?ばかりですが、お願いします。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加