PB 電子会議室
発言No. | 更新日 | 題名(クリックすると発言内容と関連するコメントが表示されます) |
---|---|---|
16189 | 01/09/05 13:29:11 | RE(1):外部関数の引数:構造体メンバにstring型の配列 By ryochan |
16184 | 01/09/04 16:15:09 | 外部関数の引数:構造体メンバにstring型の配列 By ykano |
カテゴリ:スクリプトの記述
日付:2001年09月04日 16:15 発信者:ykano
題名:外部関数の引数:構造体メンバにstring型の配列
こんにちは。
また、外部関数で構造体を引数を使う場合についての質問です。
構造体メンバにstring型の配列を使った場合、外部関数側で値を表示すると、4バイトずつずれてきます。
これも、構造体のアラインメントに関係するのかもしれませんが、どう対処していいものかわかりません。
以下のプログラムを実行すると、実行結果は、
[32][28][24]
となります。
Cで char *_buffer[]を、char **_bufferにしても同じでした。
また、アラインメントの問題かと思い、PBで
構造体 str_buf
string buffer
long dummy
という構造体を追加し、
string buffer[]
を
str_buf bufs[]
としても、変わりませんでした。
==ソース==
--- C ----
typedef struct {
unsigned long _maximum;
unsigned long _length;
char *_buffer[];
} sequence_string;
long _stdcall test1(sequence_string *p_test1)
{
char dbgbuf[2560];
memset(dbgbuf, 0, sizeof(dbgbuf));
sprintf(dbgbuf, \"[%d][%d][%d]\",
strlen(p_test1->_buffer), strlen((p_test1->_buffer)+1), strlen((p_test1->_buffer)+2));
MessageBox(NULL, dbgbuf, \"test1引数:AAD_SEQ_IN_REC SIZE\", MB_OK);
return(0);
}
--- PB ---
構造体 str_seqstr
unsigned long maximum
unsigned long length
string buffer[]
スクリプト
str_seqstr lstr_seqstr
lstr_seqstr.maximum = 5
lstr_seqstr.length = 5
FOR i = 1 TO 5
lstr_crb_seqstr.buffer[i] = \"12345678901234567890123456789012\"
NEXT
付加情報:
PowerBuilder Version (記載なし)
Client SoftWare
OS Windows95
DBMS (記載なし)
Browser (記載なし)
Server SoftWare
OS (記載なし)
DBMS (記載なし)
WebServer (記載なし)
Copyright © 2013 Power Future Co., Ltd.