一括表示

JTDX の 64Bit 版のビルドをしています。
Hamlo50.DLL が 64Bit 版では使えないので Hamlog.hdb をバイナリーで読み書きしようとしています。

ファイル・オープン時に Hamlog.hdb のパスを変数にする方法を教えて下さい。

logqso.h に QString m_HamlogHdb_path; を記載。

現在は「参照」ボタンにより JTDX.ini にパスを変更、保存は出来ています。
logqso.ui に m_HamlogHdb_path が表示される事は確認済。

logqso.cpp にて JTDX.ini より Hamlog.hdb のパスを取り込み。
JTDX.ini には HamlogHdbDir=C:/HAMLOG/Hamlog.hdb と保存されている。



パスを固定にしてなら動作していますが、m_HamlogHdb_path にするとビルド・エラーが出ます。

FILE *fp;
char *fname = "C:\\Hamlog\\Hamlog.hdb";
fp = fopen( fname, "rb" );

...以下省略...

2020/02/20(Thu) 12:37:30  [No.877]


> logqso.h に QString m_HamlogHdb_path; を記載。

すみません。QString って、どんな型なのか知りません。
CStringならわかりますけど。


> FILE *fp;
> char *fname = "C:\\Hamlog\\Hamlog.hdb";
> fp = fopen( fname, "rb" );

こちらは昔ながらのC言語ですね。これならわかります。
fname に定数のポインタをコピーしたのでは、パスの内容が変更できませんね。

こんな感じでしょうか。
FILE *fp;
char fname[MAX_PATH];
lstrcpy(fname, "C:\\Hamlog\\Hamlog.hdb");
fp = fopen( fname, "rb" );

2020/02/21(Fri) 21:13:42  [No.878]


浜田さん、ありがとうございます。

> すみません。QString って、どんな型なのか知りません。

Qt なので QString 、String 型です。


> FILE *fp;
> char fname[MAX_PATH];
> lstrcpy(fname, "C:\\Hamlog\\Hamlog.hdb"); <== ここに変数を使いたいのです。
> fp = fopen( fname, "rb" );

lstrcpy(fname, m_hamlogPath); で良いのかな? 明日朝、試してみます。

2020/02/21(Fri) 21:19:54  [No.879]


> lstrcpy(fname, m_hamlogPath); で良いのかな? 明日朝、試してみます。

Win32-APIなので、
LPTSTR lstrcpy(lpszString1, lpszString2);
・・・というプロトタイプなんですが、使えるかどうかわかりません。

HAMLOGでは、ファイル操作はCの標準関数ではなくWin32-APIを使っています。
ファイルを開く、ファイルを作成では、CreateFile();

バイナリ、テキストの読み込みは、ReadFile();

同じく書き込みは、WriteFile();

閉じるのは、CloseHandle();

標準関数の fopen();も、Windows上で使う限りライブラリ内部ではCreateFile();を呼び出しているんですよね。

ちなみに、DOS版HAMLOGでも、標準ライブラリは使わず、
_asm mov ax,3d02h
_asm int 21h
・・・って感じでファンクションコールでした。

2020/02/21(Fri) 21:53:47  [No.880]


浜田さん、ありがとうございます。

まだお悩み中........

2020/02/22(Sat) 10:41:21  [No.881]


こんにちは。
お手数をお掛けしました。何とかビルド出来る様になりました。

// JTDX.ini よりパスを取得。
m_HamlogHdb_path = settings.value("HamlogHdbDir").toString();

その後で、
FILE *file;
char *fname = m_HamlogHdb_path.toUtf8().data();
file = fopen( fname, "rb" );
     //処理コード
fclose(file);

Web検索で「QStringからcharポインタを取り出す 」を見つけてコードを借用しました。
同様の事は以前にもテストしたと思うのですが、その時は他の部分も絡んだのかビルドエラーでした。

2020/02/24(Mon) 09:37:30  [No.882]