Back
新着表示
タイトル
記事No
投稿日
投稿者
: Re: Th527api
: 887
: 2020/03/24(Tue) 20:14:36
: JG1MOU浜田
> HWND hWindow = QMainWindow->winId(); > Hwnd2 = SendMessage(Hwnd1, WM_COPYDATA,(WPARAM)hWindow, (LPARAM)&cds); // <==== この行でエラーになる これはコンパイルエラーですか? 実行時エラーですか?> * SendMessage()の三つ目のパラメータについて 自作アプリのメインウインドウのハンドルです。 つまり、送り手側のウィンドウのハンドルです。
このスレッドは管理者によって ロック されていますので、返信並びに編集は出来ません!
タイトル
記事No
投稿日
投稿者
参照先
:
Re: Th527api
:
886
:
2020/03/24(Tue) 17:24:34
:
JA2BQX 太田
:
こんにちは。 int cmmd; HWND Hwnd1, Hwnd2; COPYDATASTRUCT cds; char buffs[256]; char WinAppClassName[] = "TThwin"; Hwnd1 = FindWindow(WinAppClassName, NULL); if(Hwnd1 == NULL) { ui->lbl_test->setText("No"); } else { ui->lbl_test->setText("Yes"); } ここは何とかクリア。 Hamlog が起動していると ラベルに Yes が表示される。 起動していなければ ラベルに No が表示される。 ここからが問題で.... cmmd = 1; // コールサインを指定 cmmd |= THW_FOCUS; cmmd |= THW_ENTER; cds.dwData = cmmd; strcpy(buffs, "JG1MOU"); // コールサイン文字列 cds.cbData = strlen(buffs) + 1; // 文字列の長さ(ヌル文字分を+1) cds.lpData = &buffs[0]; // 文字列のポインタ HWND hWindow = QMainWindow->winId(); Hwnd2 = SendMessage(Hwnd1, WM_COPYDATA,(WPARAM)hWindow, (LPARAM)&cds); // <==== この行でエラーになる 説明によれば * SendMessage()の三つ目のパラメータについて あなたが作成する Turbo HAMLOG/Winを呼び出すアプリケーションの、ウインドウ ハンドルを渡す。または、Turbo HAMLOG/Winからデータを得たいウインドウのハンドルを渡す ...と Hamlog の Th527apiの HamlogMs.txt に書かれています。 JTDXのメインウインドウのハンドルが必要なのかな? それともQSOデータを転送処理をする logqso ウインドウのハンドルが必要なのかな? ここで行き詰まっています。
このスレッドは管理者によって ロック されていますので、返信並びに編集は出来ません!
タイトル
記事No
投稿日
投稿者
参照先
:
Re: Th527api
:
885
:
2020/03/23(Mon) 11:48:42
:
JA2BQX 太田
:
こんにちは。 長野さん、お世話になります。> こんにちは。その後、解決しましたか。 いえ、その後、JTDXが多言語仕様になるとの事で英語から日本語への変換テーブルの作成等に時間がとられて そのままになっています。> 下記のエラーメッセージをどのように解釈し、どのような対応を試してみましたか。 「ポインター」と「整数」と型違いの比較はNGとの事かと。 未対応。 もう一つ、 'Form1'はこのスコープで宣言されていません....。 推奨代替案: 'frm1' が示されていますがまだ未対応。 JTDXの方が少し落ち着いたら再度トライしてみます。 ありがとうございました。
このスレッドは管理者によって ロック されていますので、返信並びに編集は出来ません!
タイトル
記事No
投稿日
投稿者
: Re: Th527api
: 884
: 2020/03/23(Mon) 10:10:33
: je6lao長野
こんにちは。その後、解決しましたか。 下記のエラーメッセージをどのように解釈し、どのような対応を試してみましたか。> Qt を使っています。 > ビルドすると下記の様なエラーが出ます。 > 解決策のヒントでも良いので是非お願いします。 > > > C:\JTSDK64-Tools\tmp\wsjtx\logqso.cpp: In member function 'void LogQSO::append_Hamlog_hdb_new()': > C:\JTSDK64-Tools\tmp\wsjtx\logqso.cpp:363:17: error: ISO C++ forbids comparison between pointer and integer [-fpermissive] > if (Hwnd1 < 1) // ハムログが起動していない > ^ > C:\JTSDK64-Tools\tmp\wsjtx\logqso.cpp:373:26: error: 'Form1' was not declared in this scope > (WPARAM)Form1->Handle, (LPARAM)&cds); > ^~~~~ > C:\JTSDK64-Tools\tmp\wsjtx\logqso.cpp:373:26: note: suggested alternative: 'frm1' > (WPARAM)Form1->Handle, (LPARAM)&cds);
このスレッドは管理者によって ロック されていますので、返信並びに編集は出来ません!
タイトル
記事No
投稿日
投稿者
参照先
:
Th527api
:
883
:
2020/03/20(Fri) 11:26:20
:
JA2BQX 太田
:
何時もお世話になります。 64BitパソコンでJTDXより Hamlog に直接QSOデータを転送しようとしています。 64Bitでは Hamlog50.DLL が使えないとの事なので Th527api の中の HamlogMs.txt の利用を考えています。 #define THW_ENTER 0x10000 等は lohqso.h に記載しました。 //Th527api //HamlogMs.txt //Hamlogw.exe は起動させておく。 /************ C言語での例 ****** 実験してない *********/ との事ですが丸写しで下記のコードを logqso.cpp に記載。 void LogQSO::append_Hamlog_hdb_new() { //文字列を Hamlog に送る。 int cmmd; HWND Hwnd1, Hwnd2; COPYDATASTRUCT cds; char buffs[256]; Hwnd1 = FindWindow("TThwin", NULL); if (Hwnd1 < 1) // ハムログが起動していない return; cmmd = 1; // コールサインを指定 cmmd |= THW_FOCUS; cmmd |= THW_ENTER; cds.dwData = cmmd; strcpy(buffs, "JG1MOU"); // コールサイン文字列 cds.cbData = strlen(buffs) + 1; // 文字列の長さ(ヌル文字分を+1) cds.lpData = &buffs[0]; // 文字列のポインタ Hwnd2 = SendMessage(Hwnd1, WM_COPYDATA, (WPARAM)Form1->Handle, (LPARAM)&cds); if (Hwnd2 > 0) SetForegroundWindow(Hwnd2); // 入力ウインドウにフォーカス} Qt を使っています。 ビルドすると下記の様なエラーが出ます。 解決策のヒントでも良いので是非お願いします。 C:\JTSDK64-Tools\tmp\wsjtx\logqso.cpp: In member function 'void LogQSO::append_Hamlog_hdb_new()': C:\JTSDK64-Tools\tmp\wsjtx\logqso.cpp:363:17: error: ISO C++ forbids comparison between pointer and integer [-fpermissive] if (Hwnd1 < 1) // ハムログが起動していない ^ C:\JTSDK64-Tools\tmp\wsjtx\logqso.cpp:373:26: error: 'Form1' was not declared in this scope (WPARAM)Form1->Handle, (LPARAM)&cds); ^~~~~ C:\JTSDK64-Tools\tmp\wsjtx\logqso.cpp:373:26: note: suggested alternative: 'frm1' (WPARAM)Form1->Handle, (LPARAM)&cds);
このスレッドは管理者によって ロック されていますので、返信並びに編集は出来ません!
タイトル
記事No
投稿日
投稿者
参照先
:
Re: ファイル・オープン時に Hamlog.hdb のパスを変数にする方法
:
882
:
2020/02/24(Mon) 09:37:30
:
JA2BQX 太田
:
こんにちは。 お手数をお掛けしました。何とかビルド出来る様になりました。 // 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ポインタを取り出す 」を見つけてコードを借用しました。 同様の事は以前にもテストしたと思うのですが、その時は他の部分も絡んだのかビルドエラーでした。
このスレッドは管理者によって ロック されていますので、返信並びに編集は出来ません!
タイトル
記事No
投稿日
投稿者
参照先
:
Re: ファイル・オープン時に Hamlog.hdb のパスを変数にする方法
:
881
:
2020/02/22(Sat) 10:41:21
:
JA2BQX 太田
:
浜田さん、ありがとうございます。 まだお悩み中........
このスレッドは管理者によって ロック されていますので、返信並びに編集は出来ません!
タイトル
記事No
投稿日
投稿者
: Re: ファイル・オープン時に Hamlog.hdb のパスを変数にする方法
: 880
: 2020/02/21(Fri) 21:53:47
: JG1MOU浜田
> 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 ・・・って感じでファンクションコールでした。
このスレッドは管理者によって ロック されていますので、返信並びに編集は出来ません!
タイトル
記事No
投稿日
投稿者
: Re: ファイル・オープン時に Hamlog.hdb のパスを変数にする方法
: 879
: 2020/02/21(Fri) 21:19:54
: JA2BQX 太田
浜田さん、ありがとうございます。> すみません。QString って、どんな型なのか知りません。 Qt なので QString 、String 型です。> FILE *fp; > char fname[MAX_PATH]; > lstrcpy(fname, "C:\\Hamlog\\Hamlog.hdb"); <== ここに変数を使いたいのです。 > fp = fopen( fname, "rb" ); lstrcpy(fname, m_hamlogPath); で良いのかな? 明日朝、試してみます。
このスレッドは管理者によって ロック されていますので、返信並びに編集は出来ません!
タイトル
記事No
投稿日
投稿者
: Re: ファイル・オープン時に Hamlog.hdb のパスを変数にする方法
: 878
: 2020/02/21(Fri) 21:13:42
: JG1MOU浜田
> 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" );
このスレッドは管理者によって ロック されていますので、返信並びに編集は出来ません!