一括表示

JK1NBVです。

Delphiは、初心者です。プログラマー歴40年、
言語は、Z80、Mesa、Perl、C、Java、Lisp, Python等、色々使用しています。
Pythonではアクセスできないというので、Delphiに挑戦しています。

HAMLOGOPENでエラー ファイルがオープンできません。C.MSTが表示されます。

コードは、以下です。
Delphi 12.1 CE版です。
OS: Windows 11 Pro
解決のヒントを頂ければと思います。
よろしくお願いいたします。




program Test1;

{$APPTYPE CONSOLE}

{$R *.res}

uses
System.SysUtils, Hamlog50;
{$IFDEF MSWINDOWS}

{$ENDIF}
var
version: integer;

//DB Handle
//dbH: TDBFh;
//リターンフラグ
retF: Integer;

tth: TThLog;

dbpath: string;
Pdbpath: PChar;

begin

dbPath:= 'C:\HAMLOG\HAMLOG.hdb';

Writeln('PG: 4');

version := GetThdllVersion();
Writeln(IntToHex(version,6));

WriteLn('StrCopy');
GetMem(Pdbpath, length(dbpath)+1);
StrPCopy(Pdbpath, dbpath);

WriteLn('Open');
retF := HamlogOpen(nil, tth, Pdbpath, 0);
WriteLn('リターン値:' + IntToStr(retf));
if (retf <> SUCCESS) then Exit;

retF:=THW_read(ttH, 1, 0);
WriteLn('リターン値:' + IntToStr(retf));
if (retf <> SUCCESS) then
begin
HamlogClose(tth, 0);
Exit;
end;

WriteLn('Call Sign: ' + tth.qso.Calls);

HamlogClose(tth, 0);

end.

2024/08/05(Mon) 08:43:34  [No.1070]


こんにちは。
こちらでソースをコピーして試してみました。
同じエラーでした。

HamlogOpenでファイル名をPdbpath(Pchar)で渡していますが、最初の一文字しか読んでいないような反応です。


> JK1NBVです。
>
> Delphiは、初心者です。プログラマー歴40年、
> 言語は、Z80、Mesa、Perl、C、Java、Lisp, Python等、色々使用しています。
> Pythonではアクセスできないというので、Delphiに挑戦しています。
>
> HAMLOGOPENでエラー ファイルがオープンできません。C.MSTが表示されます。
>
> コードは、以下です。
> Delphi 12.1 CE版です。
> OS: Windows 11 Pro
> 解決のヒントを頂ければと思います。
> よろしくお願いいたします。
>
>
>
>
> program Test1;
>
> {$APPTYPE CONSOLE}
>
> {$R *.res}
>
> uses
> System.SysUtils, Hamlog50;
> var
> version: integer;
> retF: Integer;
> tth: TThLog;
> dbpath: string;
> Pdbpath: PChar;
>
> begin
>
> dbPath:= 'C:\HAMLOG\HAMLOG.hdb';
>
> WriteLn('StrCopy');
> GetMem(Pdbpath, length(dbpath)+1);
> StrPCopy(Pdbpath, dbpath);
>
> WriteLn('Open');
> retF := HamlogOpen(nil, tth, Pdbpath, 0);
> WriteLn('リターン値:' + IntToStr(retf));
> if (retf <> SUCCESS) then Exit;
>
> end.

2024/08/05(Mon) 13:41:31  [No.1071]


長野様

確認ありがとうございます。
先頭の1文字しかよまれていないということですね。

この相談室で、HAMLOGOPENのファイル名を変数にするにはという質問をみつけて、おなじようにしたのですが、だめでした。
そこで、投稿してみたしだいです。

1バイトであるべきものが、2バイトでコピーされているとかあるのでしょうかね。

もう少し、試してみます。

> こんにちは。
> こちらでソースをコピーして試してみました。
> 同じエラーでした。
>
> HamlogOpenでファイル名をPdbpath(Pchar)で渡していますが、最初の一文字しか読んでいないような反応です。
>
>
> > JK1NBVです。
> >
> > Delphiは、初心者です。プログラマー歴40年、
> > 言語は、Z80、Mesa、Perl、C、Java、Lisp, Python等、色々使用しています。
> > Pythonではアクセスできないというので、Delphiに挑戦しています。
> >
> > HAMLOGOPENでエラー ファイルがオープンできません。C.MSTが表示されます。
> >
> > コードは、以下です。
> > Delphi 12.1 CE版です。
> > OS: Windows 11 Pro
> > 解決のヒントを頂ければと思います。
> > よろしくお願いいたします。
> >
> >
> >
> >
> > program Test1;
> >
> > {$APPTYPE CONSOLE}
> >
> > {$R *.res}
> >
> > uses
> > System.SysUtils, Hamlog50;
> > var
> > version: integer;
> > retF: Integer;
> > tth: TThLog;
> > dbpath: string;
> > Pdbpath: PChar;
> >
> > begin
> >
> > dbPath:= 'C:\HAMLOG\HAMLOG.hdb';
> >
> > WriteLn('StrCopy');
> > GetMem(Pdbpath, length(dbpath)+1);
> > StrPCopy(Pdbpath, dbpath);
> >
> > WriteLn('Open');
> > retF := HamlogOpen(nil, tth, Pdbpath, 0);
> > WriteLn('リターン値:' + IntToStr(retf));
> > if (retf <> SUCCESS) then Exit;
> >
> > end.

2024/08/05(Mon) 20:16:51  [No.1072]


dbpath: string;

ではなくて、

dbpath: AnsiString;

ではいかがでしょうか?

2024/08/06(Tue) 07:19:30  [No.1073]


訂正します。

dbpath: string;
Pdbpath: PChar;

ではなくて、

dbpath: AnsiString;
Pdbpath: PAnsiChar;

としてみたらいかがでしょうか?

2024/08/06(Tue) 09:12:45  [No.1074]


浜田様

コメントありがとうございます。

いただいた内容で、変数宣言を変更すると、
E2010 'PWideChar'と'PAnsiChar'には互換性がありません。
のエラーが、HAMLOGOPENの行で出力されるようになりました。

> 訂正します。
>
> dbpath: string;
> Pdbpath: PChar;
>
> ではなくて、
>
> dbpath: AnsiString;
> Pdbpath: PAnsiChar;
>
> としてみたらいかがでしょうか?

2024/08/06(Tue) 15:10:42  [No.1075]


こんな感じではいかがでしょうか?

var
retF: Integer;
dbpath: AnsiString;
begin
dbPath := 'C:\HAMLOG\HAMLOG.hdb';
retF := HamlogOpen(nil, tth, PAnsiChar(dbPath), 0);

2024/08/06(Tue) 20:00:29  [No.1076]


浜田様

コンパイルで、以下の2つの警告・エラーが表示され、コンパイルできません。

[dcc32 警告] Test1.dpr(49): W1057 文字列の暗黙のキャスト ('AnsiChar' から 'string')
[dcc32 エラー] Test1.dpr(53): E2010 'PWideChar' と 'PAnsiString' には互換性がありません


> こんな感じではいかがでしょうか?
>
> var
> retF: Integer;
> dbpath: AnsiString;
> begin
> dbPath := 'C:\HAMLOG\HAMLOG.hdb';
> retF := HamlogOpen(nil, tth, PAnsiChar(dbPath), 0);

2024/08/06(Tue) 22:25:50  [No.1077]


Delphi 12 では、Unicodeが標準だと思います。
PChar は 暗黙のうちに PWideCharと見なされるはずです。
一方、HAMLOGでは昔ながらのShiftJISだったりします。

Hamlog50.pas 内の宣言を書き換える必要があります。
PChar はすべて PAnsiCharに書き換えてください。


> コンパイルで、以下の2つの警告・エラーが表示され、コンパイルできません。
>
> [dcc32 警告] Test1.dpr(49): W1057 文字列の暗黙のキャスト ('AnsiChar' から 'string')
> [dcc32 エラー] Test1.dpr(53): E2010 'PWideChar' と 'PAnsiString' には互換性がありません
>

2024/08/07(Wed) 08:53:07  [No.1078]


浜田様

 ありがとうございます。
 起動して、データを取り込む所はできました。
 しかし、DBから取り出された文字コードが勝手に変換されているらしく、?ばかりが表示される状態です。
 文字コードの取り扱いを勉強してみます。


> Delphi 12 では、Unicodeが標準だと思います。
> PChar は 暗黙のうちに PWideCharと見なされるはずです。
> 一方、HAMLOGでは昔ながらのShiftJISだったりします。
>
> Hamlog50.pas 内の宣言を書き換える必要があります。
> PChar はすべて PAnsiCharに書き換えてください。
>
>
> > コンパイルで、以下の2つの警告・エラーが表示され、コンパイルできません。
> >
> > [dcc32 警告] Test1.dpr(49): W1057 文字列の暗黙のキャスト ('AnsiChar' から 'string')
> > [dcc32 エラー] Test1.dpr(53): E2010 'PWideChar' と 'PAnsiString' には互換性がありません
> >

2024/08/07(Wed) 17:30:12  [No.1079]


浜田様

  Hamlog50.pas のChar もAnsiCharに変更したところ、動きました。
  ありがとうございました。


> 浜田様
>
>  ありがとうございます。
>  起動して、データを取り込む所はできました。
>  しかし、DBから取り出された文字コードが勝手に変換されているらしく、?ばかりが表示される状態です。
>  文字コードの取り扱いを勉強してみます。
>
>
> > Delphi 12 では、Unicodeが標準だと思います。
> > PChar は 暗黙のうちに PWideCharと見なされるはずです。
> > 一方、HAMLOGでは昔ながらのShiftJISだったりします。
> >
> > Hamlog50.pas 内の宣言を書き換える必要があります。
> > PChar はすべて PAnsiCharに書き換えてください。

2024/08/08(Thu) 08:42:15  [No.1080]