PB 電子会議室
カテゴリ:PowerBuilderの開発環境
日付:2000年08月02日 11:15 発信者:ryochan
題名:RE(12):DLLへ配列を渡す方法について
MINORU_Hさん、こんにちは。
ご存じかもしれませんが、
DLLで配列を渡す場合、
アドレスでやりとりしないと、DLLから
戻ってきた場合にデータ型の不一致で
APエラーが発生してしまいます。
参照渡しで数値型の引数を宣言すると
PBはDLLにアドレスを渡しますが、
どうもDLL内で関数が実行され、PBに制御が
移ったときにアドレスとして
引き継がれるため、アドレスと配列の型の
不一致でエラーが起きると思われます。
従って、外部関数の宣言では例として
function long func_x(ref long val) library \'***.dll\'
スクリプト内で
long p
long l_val1[],l_val2[]
l_val1 = {1,2,3}
p=lstrcpynA(l_val2,l_val1,0) //API
func_x(p)
DLLの関数では
(私はDelphiでDLLを作成し、検証してみました。
Cに翻訳するとこうですかね)
ポインタ型で受け取るところがミソ。
extern \"C\" __declspec(dllexport)
long WinAPI func_x(void* p);
と宣言し
long val[];
val=p;
・・・続く
もしかしたらOCXもこれで動くかもしれません。
よく考えてみるとOCXもDLLの一種ですからね。
でも動かないから質問されたのでしょうが...^^;
付加情報:
PowerBuilder Version (記載なし)
Client SoftWare
OS Windows NT 4.0
DBMS その他
Browser (記載なし)
Server SoftWare
OS (記載なし)
DBMS (記載なし)
WebServer (記載なし)
Copyright © 2013 Power Future Co., Ltd.