新着表示
タイトル
記事No
投稿日
投稿者
: Re: hdb append 時の DX Falg
: 807
: 2017/08/05(Sat) 08:38:38
: je6lao
太田さん、Delphiはどのバージョンをお使いですか?
IDEでTh.と打った時点で次の選択肢の一覧が表示されませんか。
次にQを押すと一覧がQsoのみになりそれを選択し .を押すとまた一覧が表示されます。そこにFlag1があります。構造体の中にFlagはありませんので、エラーになると思います。
構造体がすでに宣言されていれば、そのツリーにしたがって入力補助の選択肢が出るのですが。
ちなみにDelphi6 personal を使っています。
> > 文字列ではなく数値の代入です。
>
> StrPcopy() にこだわっていました。文字列では無いのでStrPcopy() は使えない、 Hi
>
> > Th.QSO.Flag := 8; // Pascal <== これだとエラーになる。
>
> Th.QSO.Flag1: = 8; <== これだとエラーにならない。DXフラグにレ点が付く。 OK
>
> StrPCopy(Th.QSO.Calls,thw_call); の書式にばかりこだわっていましたが
> Th.QSO.Calls:=thw_call; でもテストしてOKでした。
> どちらでも良いのでしょうが何か差が出るでしょうか?
thw_callの型は何でしょうか?
> Th.QSO.Calls:=thw_call; でもテストしてOKでした。
こちらではNGでした。
thw_callがstringでもarray[0..20] of charでもNGでした。
stringにして、StrPCopyはOKでした。
なので、StrPCopyをお勧めします。
var
a1, a2: array[0..8] of char;
begin
a1 := a2;
end;
たしか、これはOKでした。
a1とa2を同時に宣言するとOKです。
型のキャストは本当に面倒ですね。
このスレッドは管理者によってロックされていますので、返信並びに編集は出来ません!
タイトル
記事No
投稿日
投稿者
: Re: hdb append 時の DX Falg
: 806
: 2017/08/05(Sat) 08:34:00
: JA2BQX 太田
こんにちは。 ありがとうございます。
> sd := HamlogOpen(nil, Th, buffs, 0);
> でいいのではないでしょうか。
はい、これでも行けました。
> ただし、buffsが255文字なのでこれを超えるファイル名になると
> エラーが出ると思います。
倍の 511 にしてもOKのようなので buffs を使う時は増やしておきます。
昨日の問題が解決して一安心ですが、まだ課題がありまして、別スレッドにします。
このスレッドは管理者によってロックされていますので、返信並びに編集は出来ません!
タイトル
記事No
投稿日
投稿者
: Re: hdb append 時の DX Falg
: 805
: 2017/08/05(Sat) 08:05:47
: je6lao
すでにうまくいっているよう時に、前に戻りますが、
sd := HamlogOpen(nil, Th, buffs, 0);
でいいのではないでしょうか。
ただし、buffsが255文字なのでこれを超えるファイル名になると
エラーが出ると思います。
> Pascal 講座みたくなってしまいましたが、もう一つ教えて下さい。
>
> function HamlogOpen(Func: Pointer; var Th: TThLog; const fname: PChar; const isComp: Integer): Integer;
>
> Hamlog.hdb のパスは PChar で与えるとなっています。
> そこで hamlog_hdb_path:= 'C:\Hamlog\Hamlog.hdb'; の時に
>
> var
> buffs: array [0..255] of Char;
>
> Begin
> StrPCopy(buffs,hamlog_hdb_path);
>
> sd := HamlogOpen(nil, Th, @buffs[0], 0); ...としても転送されません。
>
> Hamlog.hdb のパスを直接 sd := HamlogOpen(nil,Th, 'C:\Hamlog\Hamlog.hdb', 0); とするのでは無くて
> 変数で指定するにはどう書けば良いのでしょうか?
このスレッドは管理者によってロックされていますので、返信並びに編集は出来ません!
タイトル
記事No
投稿日
投稿者
: Re: hdb append 時の DX Falg
: 804
: 2017/08/05(Sat) 07:13:08
: JA2BQX 太田
長野さん、ありがとうございます。 おかげさまでできました。
> GetMem(), FreeMem() を追加して文字数に応じたメモリを確保する必要があるようです。どうでしょうか。
そのようですね、実際には hdb のパスを ini にファイルから hamlog_hdb_path に取っているので
下記の様にして上手く行きました。
GetMem(fname, length(hamlog_hdb_path) + 1);
StrPCopy(fname, hamlog_hdb_path);
sd := HamlogOpen(nil, Th, fname, 0);
このスレッドは管理者によってロックされていますので、返信並びに編集は出来ません!
タイトル
記事No
投稿日
投稿者
: Re: hdb append 時の DX Falg
: 803
: 2017/08/04(Fri) 22:14:24
: je6lao
こんばんは。
GetMem(), FreeMem() を追加して文字数に応じたメモリを確保する必要があるようです。どうでしょうか。
var
hd_file: string;
fname: PChar;
begin
hd_file := 'c:\hamlog\hamlog.hdb';
GetMem(fname, length(hd_file) + 1);
StrPCopy(fname, hd_file);
sd := HamlogOpen(nil, Th, fname, 0);
FreeMem(fname);
end;
このスレッドは管理者によってロックされていますので、返信並びに編集は出来ません!
タイトル
記事No
投稿日
投稿者
: Re: hdb append 時の DX Falg
: 802
: 2017/08/04(Fri) 17:51:20
: JA2BQX 太田
長野さん、こんにちは。ありがとうございます。
> StrPcopy(fname: PChar, hdb_file: string)
ここでコンパイルは通るけど実行時にエラーで落ちます。
例外クラス External.SIGSEGV を発生させました...。
このスレッドは管理者によってロックされていますので、返信並びに編集は出来ません!
タイトル
記事No
投稿日
投稿者
: Re: hdb append 時の DX Falg
: 801
: 2017/08/04(Fri) 15:08:15
: je6lao
こんにちは、長野です。
StrPcopy(fname: PChar, hdb_file: string)
なのでシンプルにファイル名の変数をstringで宣言し
そこにファイル名を代入すればいいと思います。
ポインタを使う必要があるのでしょうか。
var
hdb_file: string;
fname: PChar;
Begin
hdb_file := 'c:\hamlog\hamlog.hdb';
StrPCopy(fname, hdb_file);
sd := HamlogOpen(nil, Th, fname, 0);
end;
このスレッドは管理者によってロックされていますので、返信並びに編集は出来ません!
タイトル
記事No
投稿日
投稿者
: Re: hdb append 時の DX Falg
: 800
: 2017/08/04(Fri) 08:57:53
: JA2BQX 太田
浜田さん、度々ありがとうございます。出来ました。
> 文字列ではなく数値の代入です。
StrPcopy() にこだわっていました。文字列では無いのでStrPcopy() は使えない、 Hi
> Th.QSO.Flag := 8; // Pascal <== これだとエラーになる。
Th.QSO.Flag1: = 8; <== これだとエラーにならない。DXフラグにレ点が付く。 OK
StrPCopy(Th.QSO.Calls,thw_call); の書式にばかりこだわっていましたが
Th.QSO.Calls:=thw_call; でもテストしてOKでした。
どちらでも良いのでしょうが何か差が出るでしょうか?
Pascal 講座みたくなってしまいましたが、もう一つ教えて下さい。
function HamlogOpen(Func: Pointer; var Th: TThLog; const fname: PChar; const isComp: Integer): Integer;
Hamlog.hdb のパスは PChar で与えるとなっています。
そこで hamlog_hdb_path:= 'C:\Hamlog\Hamlog.hdb'; の時に
var
buffs: array [0..255] of Char;
Begin
StrPCopy(buffs,hamlog_hdb_path);
sd := HamlogOpen(nil, Th, @buffs[0], 0); ...としても転送されません。
Hamlog.hdb のパスを直接 sd := HamlogOpen(nil,Th, 'C:\Hamlog\Hamlog.hdb', 0); とするのでは無くて
変数で指定するにはどう書けば良いのでしょうか?
このスレッドは管理者によってロックされていますので、返信並びに編集は出来ません!
タイトル
記事No
投稿日
投稿者
: Re: hdb append 時の DX Falg
: 799
: 2017/08/04(Fri) 07:07:06
: JG1MOU 浜田
> 浜田さん、ありがとうございます。
>
> > Th.QSO.Flag := 8;
>
> まだつまずいています。
>
> StrPCopy(Th.QSO.Flag,8); でも StrPCopy(Th.QSO.Flag:=8); でもエラ-。
え? 太田さんらしくない勘違いですね。
文字列ではなく数値の代入です。
Flag は、16ビットの整数です。文字列ではありません。
Th.QSO.Flag := 8; // Pascal
Th.QSO.Flag = 8 ' VB
Th->QSO.Flag = 8; // C言語
このスレッドは管理者によってロックされていますので、返信並びに編集は出来ません!
タイトル
記事No
投稿日
投稿者
: Re: hdb append 時の DX Falg
: 798
: 2017/08/04(Fri) 05:27:44
: JA2BQX 太田
こんにちは。
Hwnd2 := SendMessage(Hwnd1, WM_COPYDATA, Form1.Handle, LPARAM(@cds)); の方は
.... callsign から順にセットしてから
ttmp:= ttmp + thw_rkm2 + #$0D;
ttmp:= ttmp + '' + #$0D;
ttmp:= ttmp + '8' + #$0D; で出来ました。
このスレッドは管理者によってロックされていますので、返信並びに編集は出来ません!