HAMLOG プログラム開発室


新着表示
タイトル
記事No
投稿日
投稿者
参照先
Re: Th527api
890
2020/03/25(Wed) 15:36:33
JA2BQX 太田

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

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

色々検索はしているのですがこれと言う正解に巡り合えないでいます。
このスレッドは管理者によってロックされていますので、返信並びに編集は出来ません!
pagetop
タイトル
記事No
投稿日
投稿者

Re: Th527api
889
2020/03/25(Wed) 07:05:27
JG1MOU浜田
> > * SendMessage()の三つ目のパラメータについて

WM_COPYDATAで検索すると、いろいろと参考例がありますよ。
このスレッドは管理者によってロックされていますので、返信並びに編集は出来ません!
pagetop
タイトル
記事No
投稿日
投稿者
参照先
Re: Th527api
888
2020/03/24(Tue) 20:42:19
JA2BQX 太田

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

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

コンパイルエラーです。

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

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

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

もう少し探します。 C++用でも良いのかも知れませんが...。
このスレッドは管理者によってロックされていますので、返信並びに編集は出来ません!
pagetop
タイトル
記事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()の三つ目のパラメータについて

自作アプリのメインウインドウのハンドルです。
つまり、送り手側のウィンドウのハンドルです。
このスレッドは管理者によってロックされていますので、返信並びに編集は出来ません!
pagetop
タイトル
記事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 ウインドウのハンドルが必要なのかな?

ここで行き詰まっています。
このスレッドは管理者によってロックされていますので、返信並びに編集は出来ません!
pagetop
タイトル
記事No
投稿日
投稿者
参照先
Re: Th527api
885
2020/03/23(Mon) 11:48:42
JA2BQX 太田

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

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

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

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


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


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

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

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

 
このスレッドは管理者によってロックされていますので、返信並びに編集は出来ません!
pagetop
タイトル
記事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);
このスレッドは管理者によってロックされていますので、返信並びに編集は出来ません!
pagetop
タイトル
記事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);
このスレッドは管理者によってロックされていますので、返信並びに編集は出来ません!
pagetop
タイトル
記事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ポインタを取り出す 」を見つけてコードを借用しました。
同様の事は以前にもテストしたと思うのですが、その時は他の部分も絡んだのかビルドエラーでした。
このスレッドは管理者によってロックされていますので、返信並びに編集は出来ません!
pagetop
タイトル
記事No
投稿日
投稿者
参照先
Re: ファイル・オープン時に Hamlog.hdb のパスを変数にする方法
881
2020/02/22(Sat) 10:41:21
JA2BQX 太田

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

まだお悩み中........
このスレッドは管理者によってロックされていますので、返信並びに編集は出来ません!
pagetop