• 締切済み

どちらかというと本来ならVBで質問するべき内容ですが

どちらかというと本来ならVBで質問するべき内容ですが サンプルがCであることと内容的にCをやってらっしゃる方のほうが 正確な回答をいただけそうなのでこちらに投稿させていただきます。 Win32Apiの関数(DLL)をVBから呼び出そうとしているのですが 下記関数の呼び出し方で困っています。 http://msdn.microsoft.com/en-us/library/dd692950%28v=VS.85%29.aspx Examples(Cで記述されています)を参考にして VBに適宜読み替えてコーディングしているのですが // Allocate the array of PHYSICAL_MONITOR structures. pPhysicalMonitors = (LPPHYSICAL_MONITOR)malloc( cPhysicalMonitors* sizeof(PHYSICAL_MONITOR)); 上記部分をVBでどのように記述するべきなのか分かりません。 調べているとAllocCoTaskMem()というメソッドには当たったのですが そもそも「PHYSICAL_MONITOR」という構造体が無いので 引数に渡すサイズも分かりません。 (そもそもAllocCoTaskMemを使うものなのかどうかも分かっていませんが) また、構造体に当たるものが定義できても Cのsizeofのようなことができる方法も知りません。。 申し訳ありませんが どなたかご存知の方はご教示いただけると幸いです。 よろしくお願い致します。

みんなの回答

  • reset_cat
  • ベストアンサー率68% (94/138)
回答No.2

もう見てないかな・・・ PHYSICAL_MONITOR構造体はStructureで定義しますが、その定義内容はPhysicalMonitorEnumerationAPI.hファイルから探す必要があります。 Cのsizeofに該当する機能は、System.Runtime.InteropServices.Marshal.Sizeofメソッドになります。 mallocに該当する機能は、細かい違いはありますが、System.Runtime.InteropServices.Marshal.AllocHGlobalメソッドになります。 freeに該当する機能(mallocと対になる)は、System.Runtime.InteropServices.Marshal.FreeHGlobalメソッドになります。 Win32API(アンマネージコード)を呼び出す時に必要な変換機能などは、System.Runtime.InteropServices.Marshalクラスに集約されていますので、そのあたりを調べると良いと思います。 あと・・・VB2005なら.Net Frameworkは2.0になると思うのですが・・・

  • reset_cat
  • ベストアンサー率68% (94/138)
回答No.1

まず使用したいVBのバージョンを書きましょう。VB6.0とVB.netでは記述も方法も全然違います。

kyonn2008
質問者

補足

開発環境は下記の通りです。 Visual Studio 2005 .NET Framework 3.0 #投稿後、環境について何も書いていないことに気づきましたが  投稿後は追記ができないもので。不便ですよね。 よろしくお願いします。