2008-05-28

LabVIEW で複雑な型のポインタを引数に取る DLL 関数を呼び出す

Windows 版の LabVIEW には DLL(Mac なら Dylib、Linux なら共有オブジェクト) を呼び出す機能がありますが、ちょっと貧弱です。複雑な構造体のポインタを引数にとるような関数呼び出しを書けないことがあります。たとえば、こんなの。

void func(Foo* foo) {
  /* ... */
}

ヘッダファイルをたどっていければ、インポートウィザードが自力でなんとかしてくれることもありますが、してくれないこともあります。



Foo の中身が DLL 内で完結していて、LabVIEW から型の詳細を知らなくていいとき(まともなライブラリなら、そうなっているはず)なら、強引に呼び出す方法があります。この引数を、符号なし32ビット整数の値渡しにします。
Calllibraryfunc




ポインタはどうせ32ビット整数なので、細かい内部型なんか気にせずに整数扱いしても大丈夫なことがあります。もちろんメモリ確保を、呼び出し側でする必要があったりとかするので、いつでも使えるわけではありませんが、そういうやりかたもあるってことで。