お世話になります。
MACアドレスを取得するには
http://madia.world.coocan.jp/vc/vc_bbs/200411/200411_04110035.html
の方法があることが検索できました。
ここで、別途「Windows Platform SDK」をインストールしていますが、
標準の機能による
別の方法で取得できないでしょうか?
無理難題かもしれませんがよろしくお願いいたします。
> 標準の機能による
とは?
C言語/C++言語のみの機能?
だったら、そういうものはないと思われますが。
>Windows Platform SDK
は Windows という OS の機能を使っているだけだと。
回答ありがとうございます。
>> 標準の機能による
>とは?
>C言語/C++言語のみの機能?
その通りです。
>だったら、そういうものはないと思われますが。
上記URLのような方法以外はないということでしょうか?
例えば、「コマンドプロンプト」で
「ipconfig/all」コマンドで、
IPアドレスやMACアドレスを表示することができるのですが、
この機能をうまくつかえたりしないでしょうか?
よろしくお願いいたします。
そういうことでいいなら出来なくも無い。
system("ipconfig /all>out.txt")
fopen("out.txt","r");
fread(fpin,line);
fclose(fpin);
みたいな感じでipconfigの出力であるout.txtを自分で解析して。
まあこんな汎用性が無くてカッコ悪い方法、俺なら絶対しないけど。
PlatformSDKで触れるのはOSの「標準の機能」でしょう
ipconfigだって結局中で同じ事するわけで
PlatformSDKの追加インストールが必要なのは、
標準でそこまでいらないだろうとMicrosoftが判断したからであって
PlatformSDKがない環境では使えないと言うわけでは無いと思います。
とーりすがりさんが言われている通り、使う側でSDKを入れる必要は無いと
思いますのでOS標準の機能と考えて良いと思います。
なぜ、標準にこだわるのかをきちんと説明した方が良いと思いますよ。
ちなみに他のOSへの移植を考えているならいずれにせよ駄目でしょうねぇ。
ipconfig使っている時点で既にOS依存が出てますし。
こんにちは。
大元の質問を出していたどらです。
PATIOさんの仰るとおり、PlatformSDKは、開発する側にインストールすればOKで、実行する側にインストールする必要はありません。
基本的に、PlatformSDKで開発できる内容は、WindowsのOS 標準のライブラリを使っているためです。
なので、Windowsのみで使うアプリなのであれば、この方法が1番だと思います。
なので、SDKを入れるのが面倒ならipconfigを使った方法、外部exeを使わずにCloseさせたいのであればSDK、という判断でよいのではないでしょうか?
参考までに、私はipconfigの結果から抜き出す方は面倒くさいと思ったのでSDKを選びました。
回答ありがとうございます。
皆さんの意見をお聞きし、
やはり「Windows Platform SDK」による方法で
PGを組もうかと思い、以下のURLを参考に試してみました。
http://www.dinop.com/vc/getmac_iphlpapi.html
ここで、掲載されているように
iphlpapi.h内のGetIcmpStatisticsEx() をコメントアウトしたのですが
結果以下のメッセージが表示されてしまいました。
LINK : fatal error LNK1104: ファイル "iphlpapi.h" を開けません。
MACアドレスを取得したことがある方で、
何かお気づきの点がありましたら
ご教授願います。
よろしくお願いします。
コンパイラになにを使っているのかわからないので何ともいえませんが、そのコンパイラが読める位置にヘッダーファイルが置かれていますか?
一般的に、コンパイラにPlatformSDKでインストールされたヘッダやソース、ライブラリのディレクトリを追加してあげないと、コンパイラはヘッダファイルを参照できませんよ〜。
VC(VC2003)の場合はツール→オプションからプロジェクトのVC++ディレクトリで、インクルードファイル、ソースファイル、ライブラリファイルにそれぞれ該当するフォルダを追加してあげる・・・って感じだったと思います。
おそらくどらさんの指摘通りでしょう。
PlatfromSDK、インストールするとその辺りも設定してくれるはずなのですが…
VCならば。
なお、普通は環境で提供されているヘッダファイルを書き換えるということはしません。
ちゃんと元に戻しておいた方がいいです。
# シンボルの定義がたりなくてプリプロセスの段階で落とされている。
# とかいうのが考えられる理由ですが。
## 手元のPlatformSDKの見たけど、普通にPMIB_ICMP_EXありましたけどね…
回答ありがとうございます。
>一般的に、コンパイラにPlatformSDKでインストールされたヘッダやソー
>ス、ライブラリのディレクトリを追加してあげないと、コンパイラはヘッダ
>ファイルを参照できませんよ〜。
以下のように追加しました。
インクルードファイル
C:\PROGRAM FILES\MICROSOFT PLATFORM SDK\INCLUDE
ライブラリ
C:\PROGRAM FILES\MICROSOFT PLATFORM SDK\LIB
実行可能ファイル
C:\PROGRAM FILES\MICROSOFT PLATFORM SDK\BIN\WINNT
ソースファイル
C:\PROGRAM FILES\MICROSOFT PLATFORM SDK\SRC
># シンボルの定義がたりなくてプリプロセスの段階で落とされている。
># とかいうのが考えられる理由ですが。
>## 手元のPlatformSDKの見たけど、普通にPMIB_ICMP_EXありましたけどね…
PMIB_ICMP_EX関数をコメントアウトすると以下のメッセージが表示されます。
c:\program files\microsoft platform sdk\include\iphlpapi.h(183) : error C2065: 'PMIB_ICMP_EX' : 定義されていない識別子です。
c:\program files\microsoft platform sdk\include\iphlpapi.h(183) : error C2146: 構文エラー : ')' が、識別子 'pStats' の前に必要です。
c:\program files\microsoft platform sdk\include\iphlpapi.h(183) : warning C4229: 旧形式が使用されています : データの修飾子は無視されます。
c:\program files\microsoft platform sdk\include\iphlpapi.h(185) : error C2059: 構文エラー : ')'
他になにかお気づきの点がありましたらご指摘ください。
追加で質問します。
Windows Platform SDKのインストールは、
下記URLの、
「PSDK-x86.exe」のダウンロードボタンからで良かったでしょうか?
なお、PCの環境は、
OS : XP
コンパイラ : VC++6.0
です。
よろしくお願いします。
VC++ 6.0はそのSDKにおいてサポートされていないです。なので,
> The last SDK that will work with VC 6.0 is the February 2003 Edition, you can order a CD on the fulfillment site.
ということだそうです。
# MSDN Subscription Downloadには2003/FebのPlatform SDKがありましたけど……。
This SDK does not support working with Microsoft Visual C/C++ 6.0 as support for VC 6.0 has ended.
とあるね。
もう公開されていない古いバージョンの (VC++6.0 対応の) SDK を入れるか
VC++6.0 など捨てて新しいものに乗り換えるか。
MAC アドレス何に使うんだろ。
詐称は簡単だし LAN カード複数なんて今時当たり前な話だし。
VC6でも使えるPlatfromSDK、the February 2003 Editionならここにあります。。
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/psdk-full.htm
これよりも新しいPSDKを入れた後だとうまくインストール出来ないかもしれません。
the February 2003 Editionを入れる前に新しいやつをアンインストールしてください。
まだあったんだ PSDKFeb2003
らっきー!いまのうちに保存保存っと。にゃけさんありがとさんです。
回答ありがとうございます。
>VC6でも使えるPlatfromSDK、the February 2003 Editionならここにあります。。
>http://www.microsoft.com/msdownload/platformsdk/sdkupdate/psdk-full.htm
>これよりも新しいPSDKを入れた後だとうまくインストール出来ないかもしれません。
>the February 2003 Editionを入れる前に新しいやつをアンインストールしてください。
新しいものをアンインストール後、
上記URLをインストールし、コンパイルしたら、以下のエラーが発生しました。
c:\program files\microsoft sdk\include\iphlpapi.h(183) : error C2065: 'PMIB_ICMP_EX' : 定義されていない識別子です。
c:\program files\microsoft sdk\include\iphlpapi.h(183) : error C2146: 構文エラー : ')' が、識別子 'pStats' の前に必要です。
c:\program files\microsoft sdk\include\iphlpapi.h(183) : warning C4229: 旧形式が使用されています : データの修飾子は無視されます。
c:\program files\microsoft sdk\include\iphlpapi.h(185) : error C2059: 構文エラー : ')'
エラーの原因は以下のフォルダにあるVisualStudioVer6をインストール時に標準でついてくる"IPRTRMIB.H"('PMIB_ICMP_EX'が定義されていない)を先にインクルードするため。
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE
対処:
今回ダウンロードしてきたPlatForm SDKの"IPRTRMIB.H"を参照するよう
インクルード順序を変更(C:\PROGRAM FILES\MICROSOFT SDK\INCLUDEを一番上に持ってきた。)を行った。
結果:
以下のコンパイルエラー
LINK : fatal error LNK1104: ファイル "iphlpapi.h" を開けません。
質問事項として2点あります。
① インストール後、上記のような処理を行わないと、コンパイルがとおらないのか?
② ①の通りの場合、「結果:」で示したコンパイルエラーの対処方法は?
何かお気づきの点があればご指導よろしくお願いします。
質問事項①、②への直接の答えではありませんが。。
"PMIB_ICMP_EX"でググって見ましたか?
なにか興味深いことが書いてあるように見えますよ?
http://www.google.com/search?num=100&hl=ja&rlz=1B2GGGL_jaJP176&q=PMIB_ICMP_EX&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=lang_ja
# ネットワークプログラミングのことはよく知らないし
# このスレッドのレスもちゃんと読んでいないので
# あまりお役に立てなくて申し訳ありませんけど。。
>① インストール後、上記のような処理を行わないと、コンパイルがとおらないのか?
古いの参照しないようにしなきゃなんないからね
>② ①の通りの場合、「結果:」で示したコンパイルエラーの対処方法は?
パスはちゃんとあってるの?
回答ありがとうございます。
>パスはちゃんとあってるの?
「ツール-オプション」のディレクトリを確認し、
正しく指定しています。
上記URLに記載の通り、ライブラリも、PSDKのディレクトリを先頭に
したのですが、
LINK : fatal error LNK1104: ファイル "iphlpapi.h" を開けません。
を解消できません。
他に何かお気づきの点がありましたら
よろしくおねがいします。
なぜにリンカエラー?
リンクするライブラリにiphlpapi.hが含まれていたりしませんか?
YuO さんのコメントに蛇足
本当にメッセージが正しいのなら、間違って
#pragma comment(lib,"iphlpapi.lib") // 正
#pragma comment(lib,"iphlpapi.h") // 誤
と入力してる可能性があるのでチェックすべし
ライブラリ→入力の欄に iphlpapi.h と書いてないかチェックすべし
回答ありがとうございます。
解決できました。
本当に申し訳ないのですが、
プロジェクトが壊れていたようです。
ご指摘の点、確認しまして、問題なかったので、
新規プロジェクトにて再度確認しましたら
正常にコンパイルできました。
いろいろありがとうございました。
ツイート | ![]() |