VBからDLL関数を呼びたいのです。
DLL関数
AD_Open_ADSys(PCI_CONFIG_HEADER_0 **); となっています。
ポインタのポインタです。
PCI_CONFIG_HEADER_0 は構造体です。
1.VB側で
Declare Function AD_Open_ADSys Lib "ADDLL.DLL" (ByRef Config As Long) As Long
と宣言して呼んでも、DLLが正しく読めませんというエラーとなります。
2.**はCでポインタのポインタですが、VBではどのような方法で扱えばいいのでしょうか?
宜しくお願いします。
> 2.**はCでポインタのポインタですが、VBではどのような方法で扱えばいいのでしょうか?
VBでは「ポインタを扱う」事はできませんが、
要はDLLに「構造体を示すアドレスを格納した変数のアドレス」を渡せばよいのですよね。
#VB6と仮定して、
隠し関数の「VarPtr関数」で構造体のアドレスを求めて、
Long型変数に代入して、
そのLong型変数を参照渡しで渡すとか・・・
VBのバージョンは何でしょう?
VB6以前とVB.NETではIntegerやLongのサイズが異なりますので、
VB6以前用の定義そのままでVB.NETを使うと、そのエラーが発生します。
そうではなく、VB6以前で上記のエラーが発生しているとすれば、引数の
数やサイズには問題がないのならば、その関数はcdecl呼び出し規約を
使っている可能性もあります。
二重ポインタは、VB6以前だとポインタをLong型で受けて、それを構造体に
コピーするのが無難でしょう。VB.NET以降ならば様々な手段がとりえると
思います。
で、マルチポストであるとはいえないのかも知れませんが、他で質問して
有効な回答を得られなかったとしたら、両方にその旨を記しておくべきでは。
ご意見ありがとうございます。
バージョンは、VB6を使用しています。
ちなみにOSの種類は? 2000やXPだと、例えば"AD680_Open_ADSys"のように関数名も変わったりしません?
って、別の製品かも知れないですね。そもそもどこの製品のを使っている
のでしょうか? また、そこには付属のVB用サンプルはありませんか?
OSは2000です。
この製品は、PCIに入るADボードで、大手メーカー製品ではありません。
委託製造の会社です。
サンプルは、VCで記述されているのです。
VCでは動作しています。
何年も前の製品なので、聞いてもわからなくて。
だとすると、おそらくはcdecl呼び出し規約を使っているのだと
思いますよ。VB6で使うのならばOn Error Resume Nextで流して
しまうとか。
K.J.Kさま
ありがとうございます。
何とか使用できる状態を探して、使用してみます。
>http://park7.wakwak.com/~efc21/cgi-bin/exqalounge.cgi?print+200705/07050169.txt
明らかに私の解答を受けてから、こちらにポストしていますよね?
あちらでは有効な解答がもらえないと踏んだのでしょうか?(カナリ失礼)
環境がVB6なのでこちらに移動したのであれば、
あちらに移動したとのことを記述しましょう。
ツイート | ![]() |