タイトル : Re^3: 異なる構造体の関数渡し 投稿日 : 2010/03/16(Tue) 17:59 投稿者 : 魔界の仮面弁士
ByRef iSmp As Variant を、 ByRef iSmp As ENE_SHM_REF_POWER に 変更したメソッドを用意するだけでは都合が悪いのでしょうか? どうしても Variant 引数にしたいのであれば、先述のパターン(b)にするために、 そのユーザー定義型を ActiveX DLL のプロジェクトなどとして登録する必要があるかと。 > クラスにする方法が分かりません。 であれば、止めておいたほうが良いかと思います。 > 異なる構造体3種は共有メモリです。 ENE_SHM_PWR_INFO と ENE_SHM_REF_POWER の 2 種ではありませんでしたっけ? > 其のポインタとサイズでMoveMemory()したいのです。 > 単に、Cの void * として取り扱いたいだけなのですが…。 API との受け渡しであれば、ByRef As Any 引数にすれば、任意のユーザー定義型を ポインタとして渡せますが……VB 側のプロシージャではそうはいきません。 それぞれのユーザー定義型のサイズに互換性があれば、LSet で 一方の型に変換するという手もありますけれどね。 あるいは、それぞれのユーザー定義型を「Byte 配列に変換する関数」や 「Byte 配列を受け取り、それをユーザー定義型として返す関数」を 用意するというのは如何でしょう。 呼び出しの手間は増えますが、Byte 配列で交換するのであれば RtlMoveMemory / MoveMemory への影響は無いと思います。 |