一括表示

Th527api 投稿者:JA2BQX 太田  《URL》  

何時もお世話になります。
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);

2020/03/20(Fri) 11:26:20  [No.883]


Re: Th527api 投稿者: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);

2020/03/23(Mon) 10:10:33  [No.884]


Re: Th527api 投稿者:JA2BQX 太田  《URL》  

こんにちは。
長野さん、お世話になります。

> こんにちは。その後、解決しましたか。

いえ、その後、JTDXが多言語仕様になるとの事で英語から日本語への変換テーブルの作成等に時間がとられて
そのままになっています。

> 下記のエラーメッセージをどのように解釈し、どのような対応を試してみましたか。


「ポインター」と「整数」と型違いの比較はNGとの事かと。  未対応。 


もう一つ、 'Form1'はこのスコープで宣言されていません....。
推奨代替案: 'frm1' が示されていますがまだ未対応。

JTDXの方が少し落ち着いたら再度トライしてみます。

ありがとうございました。

 

2020/03/23(Mon) 11:48:42  [No.885]


Re: Th527api 投稿者:JA2BQX 太田  《URL》  

こんにちは。

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 ウインドウのハンドルが必要なのかな?

ここで行き詰まっています。

2020/03/24(Tue) 17:24:34  [No.886]


Re: Th527api 投稿者:JG1MOU浜田 

> HWND hWindow = QMainWindow->winId();
> Hwnd2 = SendMessage(Hwnd1, WM_COPYDATA,(WPARAM)hWindow, (LPARAM)&cds); // <==== この行でエラーになる

これはコンパイルエラーですか? 実行時エラーですか?

> * SendMessage()の三つ目のパラメータについて

自作アプリのメインウインドウのハンドルです。
つまり、送り手側のウィンドウのハンドルです。

2020/03/24(Tue) 20:14:36  [No.887]


Re: Th527api 投稿者:JA2BQX 太田  《URL》  

浜田さん、こんばんは。
お世話になります。

> これはコンパイルエラーですか? 実行時エラーですか?

コンパイルエラーです。

> > * SendMessage()の三つ目のパラメータについて
> 自作アプリのメインウインドウのハンドルです。
> つまり、送り手側のウィンドウのハンドルです。

...だと思っていますがメインウインドウでは無くて「子ウインドウ」から転送です。
その時は「子ウインドウ」のハンドルでしょうか、それとも親(メイン)の。

Qtで探しましたが自分自身のハンドル取得はなかなか見つからなくて。

もう少し探します。 C++用でも良いのかも知れませんが...。

2020/03/24(Tue) 20:42:19  [No.888]


Re: Th527api 投稿者:JG1MOU浜田 

> > * SendMessage()の三つ目のパラメータについて

WM_COPYDATAで検索すると、いろいろと参考例がありますよ。

2020/03/25(Wed) 07:05:27  [No.889]


Re: Th527api 投稿者:JA2BQX 太田  《URL》  

こんにちは、ありがとうございます。

> > > * SendMessage()の三つ目のパメータについて
> WM_COPYDATAで検索すると、いろいろと参考例がありますよ。

色々検索はしているのですがこれと言う正解に巡り合えないでいます。

2020/03/25(Wed) 15:36:33  [No.890]


Re: Th527api 投稿者:je6lao長野 

Qtはまったく知りませんので的外れでしょうが・・・。

全体がよく見えません。

1.JTDXにLogQSOを組み込んでコンパイル。
2.そのLogQSOは、JTDXで得られたデータをHamlogへデータを転送。

JTDXのフォームハンドルは、Form1->Handleでエラーになる。
代案として frm1->Handle が提示されていましたが、これは試したのでしょうか。
そもそもJTDXやLogQSOのフォーム名をどう指定しているのでしょうか。
Qtは指定できない?

それからsendmessageの後、Handleを使って何かするのですか。

2020/04/06(Mon) 11:41:55  [No.905]


Re: Th527api 投稿者:JA2BQX 太田  《URL》  

こんにちは。

> 1.JTDXにLogQSOを組み込んでコンパイル。

   JTDX でQSOしてログに記録するウインドウが LogQSO です。
   このソース内にコードを追加しています。

> 2.そのLogQSOは、JTDXで得られたデータをHamlogへデータを転送。

   はい、Hamlogへデータを転送するコードを追加中です。

> JTDXのフォームハンドルは、Form1->Handleでエラーになる。
> 代案として frm1->Handle が提示されていましたが、これは試したのでしょうか。

  はい、ビルドエラーが出ます。

> そもそもJTDXやLogQSOのフォーム名をどう指定しているのでしょうか。
> Qtは指定できない?

Qt ではフォーム名は logqso.ui となっています。
ソースコードは logqso.cpp に書き、ヘッダー部は logqso.h です。

ソースコード全体は下記にあります。
https://github.com/jtdx-project/jtdx/releases/


> それからsendmessageの後、Handleを使って何かするのですか。

Hamlog にJTDXでのQSOデータを転送しようとしています。

私のHPで既に出来ているEXEと改修をしたソースコードは公開しています。

JTDXは今までは32Bit版のみでしたが最近は32Bit版と64Bit版の両方になりました。
32Bit版では Hamlog50.dll が使えますが64Bit版では使えない(Hamlog50.dll が64Bitに未対応)のでその代替え策をやろうとしています。

Qtでの32Bit版及び64Bit版のビルド環境の構築方法も私のHPからリンクを張ってあります。

2020/04/06(Mon) 15:36:39  [No.906]


Re: Th527api 投稿者:je6lao長野 

いえいえ、sendmessageを送った後です。

Handleを使わなければ、
・postmessageは使えないのでしょうか。
・Handleに適当な値を入れておけばいいのでは。

self->Handle, logqso->Handle などは既に試していらっしゃいますよね。エラーメッセージも同じでしょうね。

> > それからsendmessageの後、Handleを使って何かするのですか。
>
> Hamlog にJTDXでのQSOデータを転送しようとしています。

2020/04/06(Mon) 16:35:54  [No.907]


Re: Th527api 投稿者:JA2BQX 太田 

こんばんは。

> Handleを使わなければ、
> ・postmessageは使えないのでしょうか。
> ・Handleに適当な値を入れておけばいいのでは。

ゼロを代入してもエラーでした。

> self->Handle, logqso->Handle などは既に試していらっしゃいますよね。エラーメッセージも同じでしょうね。

これは未テストです。試してみます。

2020/04/06(Mon) 19:58:59  [No.908]


Re: Th527api 投稿者:je6lao長野 

No.886で下記がありましたが、
 HWND hWindow = QMainWindow->winId();

HWND hWindow = QMainWindow::winId();

ではないのでしょうか?


WPARAM=0 でコンパイルエラーになるのなら
原因は他にありそうな気がしますけど。
エラーメッセージはヒントになりませんか。

2020/04/06(Mon) 20:09:36  [No.909]


Re: Th527api 投稿者:JA2BQX 太田  《URL》  

ありがとうございます。
暫く頭を冷やします....。

2020/04/10(Fri) 08:39:23  [No.910]