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 (記載なし)

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