一括表示

C++ builder でturbo hamlog のデータを読むプログラムを書こうとしています。
hamlog50.dllを呼び出して、HamlogOpenをしてTHW_readをするところまでできたのですが、下記のように
TThLog thlog;
ret=HamlogOpen(NULL,&thlog,fname,0);..
.
ret=THW_read(&thlog,count,0);
のようにcount(>=1) のレコードを読みました。
if (ret == SUCCESS )
{ ここで、
thlog.Qso.Calls,thlog.Qso.Date, などは正しく読めているのですが、

thlog.Qso.Freq などのchar ポインタで定義されているものを読もうとするとaccess violation となってしまいます。

また、thlog.Qso.Rmk1Lenなどの変数の意味が分からず困っているところです。どなたかご存じのかた、アドバイスをいただけないでしょうか?

2024/09/13(Fri) 21:04:42  [No.1081]


どうも、C++ builder 12 では、hamlog50.h で、__BORLANDC__ が定義されてるのですが、
#pragma pack(1)
で指定しないと構造体のアライメントがhamlogのデータに合うようにならないようでした。

> C++ builder でturbo hamlog のデータを読むプログラムを書こうとしています。
> hamlog50.dllを呼び出して、HamlogOpenをしてTHW_readをするところまでできたのですが、下記のように
> TThLog thlog;
> ret=HamlogOpen(NULL,&thlog,fname,0);..
> .
> ret=THW_read(&thlog,count,0);
> のようにcount(>=1) のレコードを読みました。
> if (ret == SUCCESS )
> { ここで、
> thlog.Qso.Calls,thlog.Qso.Date, などは正しく読めているのですが、
>
> thlog.Qso.Freq などのchar ポインタで定義されているものを読もうとするとaccess violation となってしまいます。
>
> また、thlog.Qso.Rmk1Lenなどの変数の意味が分からず困っているところです。どなたかご存じのかた、アドバイスをいただけないでしょうか?

2024/09/14(Sat) 08:56:58  [No.1082]


#pragma指令の仕様が変わったのでしょうかね。私は古いの使ってますので。

構造体アライメントは、バイトアライメントとしてください。
ファイルヘッダをそのまま構造体に読み込んだりしてますので、ワードアライメントなどでは不都合があります。

> どうも、C++ builder 12 では、hamlog50.h で、__BORLANDC__ が定義されてるのですが、
> #pragma pack(1)
> で指定しないと構造体のアライメントがhamlogのデータに合うようにならないようでした。

2024/09/15(Sun) 22:06:58  [No.1083]