PB 電子会議室

コメント

発言No. 更新日 題名(クリックすると発言内容と関連するコメントが表示されます)
12629 00/08/04 18:12:19 RE(18):PB6.5: VCで作成したActiveXコントロールへ配列を渡す方法について By ryochan
12610 00/08/04 13:14:52 RE(17):PB6.5: VCで作成したActiveXコントロールへ配列を渡す方法について By めめ
12599 00/08/04 09:39:21 RE(16):PB6.5: VCで作成したActiveXコントロールへ配列を渡す方法について By ryochan
12590 00/08/03 16:34:52 RE(15):PB6.5: VCで作成したActiveXコントロールへ配列を渡す方法について By めめ
12575 00/08/02 18:54:39 RE(14):PB6.5: VCで作成したActiveXコントロールへ配列を渡す方法について By めめ
12559 00/08/02 15:53:25 RE(13):DLLへ配列を渡す方法について By ryochan
12548 00/08/02 11:15:53 RE(12):DLLへ配列を渡す方法について By ryochan
12544 00/08/02 07:50:14 RE(11):PB6.5: VCで作成したActiveXコントロールへ配列を渡す方法について By MINORU_H
12289 00/07/19 08:22:13 RE(10):PB6.5: VCで作成したActiveXコントロールへ配列を渡す方法について By MINORU_H
12288 00/07/19 07:21:53 RE(9):PB6.5: VCで作成したActiveXコントロールへ配列を渡す方法について By MINORU_H
12287 00/07/19 07:15:51 RE(8):PB6.5: VCで作成したActiveXコントロールへ配列を渡す方法について By MINORU_H
12285 00/07/19 01:58:43 RE(7):PB6.5: VCで作成したActiveXコントロールへ配列を渡す方法について By Taka
12282 00/07/18 15:44:00 RE(6):PB6.5: VCで作成したActiveXコントロールへ配列を渡す方法について By めめ
12280 00/07/18 15:06:22 RE(5):PB6.5: VCで作成したActiveXコントロールへ配列を渡す方法について By ryochan
12272 00/07/18 10:52:36 RE(4):PB6.5: VCで作成したActiveXコントロールへ配列を渡す方法について By MINORU_H
12271 00/07/18 10:26:11 RE(3):PB6.5: VCで作成したActiveXコントロールへ配列を渡す方法について By MINORU_H
12257 00/07/17 13:45:17 RE(2):PB6.5: VCで作成したActiveXコントロールへ配列を渡す方法について By ryochan
12248 00/07/15 13:30:25 RE(1):PB6.5: VCで作成したActiveXコントロールへ配列を渡す方法について By Taka
12246 00/07/15 08:26:20 PB6.5: VCで作成したActiveXコントロールへ配列を渡す方法について By MINORU_H

カテゴリ:PowerBuilderの開発環境
日付:2000年07月19日 07:15 発信者:MINORU_H
題名:RE(8):PB6.5: VCで作成したActiveXコントロールへ配列を渡す方法について

ryochanさん、おはようございます。

>無責任にコメントしてしまい申し訳ありません。

いえ、コメントしていただけるだけでも有り難いです。

>今、検証する余裕がないので、またまた無責任発言ですが、
>short *と言われるようにポインタで
>受け取りたいのであれば、型なしポインタ
>Cはvoid*で宣言し、
>受け取れば、受け取ることは出来ます。
>それを特定の型のポインタに型キャストして
>から逆参照します。

やはり、問題はPBが外部関数へ引数を渡すときに新たに領域を確保し、データのコピーを
渡しているという部分の様です。(参照渡しであれば、その新規メモリ領域のアドレスを
渡しているようです。外部関数内で値を操作する場合は、PB内で何らかの細工がされている
のでしょう)

そのメモリに展開するデータ長が、外部関数の引数の宣言がshort *である為に2バイト
分しか展開されないのです。前回のryochanさんの記事で思ったんですが、DLLであれば
External宣言で 

function long poo(ref int param[8]) ...

の様に「これだけのデータを外部関数で使うよ」と宣言している為に、PB側で判断できま
すが、OCXの様にExternal宣言がない(できない?)場合ではshort *の様な宣言ではPBは
2バイト分しか展開しないのではないでしょうか。(すごく仕様っぽい)

すなわち、明示的に使用する領域を宣言しなければならないのではないでしょうか。

もしそうであれば、OCXには実質的に配列を渡すことができないということになりますが...
少なくともVCのウィザードでは引数の宣言に使える型はかなり限定されています。
VARIANT*にすればいいというものではなさそうです。

>でも、最終的には配列を分解するしかないかもしれないですね。

って事ですかね。
OCXを普通のDLLで書き直すってのもありますけど、どっちが早いかな?。


付加情報:

PowerBuilder Version (記載なし)

Client SoftWare

OS Windows NT 4.0
DBMS その他
Browser (記載なし)

Server SoftWare

OS (記載なし)
DBMS (記載なし)
WebServer (記載なし)

PowerSpaceの運営は、パワーフューチャー株式会社が行っております。
Copyright © 2013 Power Future Co., Ltd.