現在、WMIから様々な情報を取得するクラスを作成しています。
その中で、Win32_NetworkAdapterConfigurationクラスの中にある「IPAddress」についてなのですが・・・
基本的に取得する値はVARIANT型で取得してますので、この中のvtの値から、どの型のデータ型かを判別して値を取得するように作っています。
Win32_NetworkAdapterConfigurationクラスを見てみると、IPAddressは「String」とあったので、BSTR型だと思い、値を取ろうとしたのですが・・・。
vtの値が8200になっており、型が判別できませんでした。
念のため、BSTR型と無理矢理判断して値を取ろうとしましたが、無理でした(笑)。
MSDNを見ていると、Stringのなかに「String」「String array」と表記が2種類あることがわかったのですが、この「String array」の値をどの様に取ればよいのかが???で・・・。
どなたかご存じの方いらっしゃいませんか?
よろしくお願いします。
VC++.net、Win2000またはXPです。
C言語でやったことがないのですが・・・
このページが参考になるのでは?
以上。
岡田さん
他の値はほとんど取得できてるんです。
参考にしてたのは岡田さんが紹介されているページです。
IPアドレスの値だけVARIANT::vt値がVT_XXXで定義されていないとしか思えない値になっていて、値が取れずに困っているんです(^^;
WMIの値を取得するためのプログラムではなく、そのプログラムで取得した値のうち、型が識別で無いために結果を表示できなくて困っているんです。
なので、岡田さんが紹介されているサンプルを元にWin32_NetworkAdapterConfigurationクラスのIPAddressの値を取得したとき、どの変数型で格納されていて、それを表記するにはどうすればいいかが知りたいのです(文字列やBOOL系の型は取得できるように作り込んでいますので、他の型だった場合、それを実装させなければならないので・・・)。
最初に書き込んだ内容がわかりにくくてすみません(^^;
よろしくお願いします。
そうでしたか・・・
マイクロソフトの英語サイトの方でWin32_NetworkAdapterConfiguration
クラスの説明を見ますと、String Arrayと指定されています。
C++では、string IPAddress[];となってます。
VARIANTから、String Arrayに変換しないといけないと言うことですね。
ただ、CHString Class と言う記述も見つけましたが・・・関係あるか
どうか解りません。
要はVARIANTに入ってくるのはString Arrayへのアドレスだろうと思わ
れますので、キャストしてポインターで取れませんはね・・・
実験していないので、解りませんので・・・
以上。
岡田さん、レスありがとうございます(^^)
あれから色々調べてみたのですが・・・
>vtの値が8200になっており、型が判別できませんでした。
vt = 8200; → つまり0x2008
の時、
vt = VT_BSTR | VT_ARRAY;
であることまではわかりました。
・・・が、この時値を取得する方法が全くわからず・・・
どなたかご存じの方いらっしゃいましたらお願いします(T_T)
昔使った本を引っ張って・・・
VT_BSTR | VT_ARRAY は、SAFEARRAYですネ!
要は、SAFEARRAY配列のデータの受け渡しになるようです。
C#やVBなら簡単なのですが、C++で実現するには、Safexxxxx 関係の
API? 関数等を調べてみて下さい。
ソフトバンク
ATLプログラミング ISBN4-7973-0689-0 \ 4200.-
少々記載がありましたが・・・
あくまでご参考と言うことで。
以上。
灯台下暗し・・・
こちらのサイトの過去ログにありました!
http://madia.world.coocan.jp/cgi-bin/Vcbbs/wwwlng.cgi?print+200312/03120012.txt
このままでは、CoCreateInstanceでエラーになるケースになるので
CoInitialize(0);
は忘れずに入れてもらえれば・・・
ただし!!!
Win32_NetworkAdapterConfigurationクラスで、IPAddressは取れません
でした。動作確認としては、Win2000/XPの両方で実行しましたが、
IPAddressには、中身としてアドレス情報は入ってきませんでした。
確認として、VB6にて同様にWin32_NetworkAdapterConfigurationの情報
を取得して、IPAddressを見ましたが、何も情報は取れませんでした。
結果として、マシンのIPAddressを取得する方法は、WMIでは出来ない
と言うことになります。
http://homepage2.nifty.com/spw/tips/GetIpTable.html
このような方法で取得することになろうかと・・・
ご参考までに・・・
※ ネットワークアダプタの有効化・無効化なら私が作成したものが
過去ログでダウンロード可能になっています。C#.NETで作成して
おりますが、基本的には、Win32 API を呼び出しておりますので
C++.NETには移行可能です。
以上。
岡田さん
ありがとうございます。
String Arrayについて少し調べてみます。
それでわからない場合は、また別スレあげますね(^^)
→件名にあげているのとちょっと内容が変わってくるような気がするので・・・。
ツイート | ![]() |