HAMLOG プログラム開発室


新着表示
タイトル
記事No
投稿日
投稿者

Re: THW_updateについて
157
2009/08/15(Sat) 06:02:19
JA2BQX 太田
こんにちは。

> 構造体の中のポインタをVBとの間でやり取りしなくて済むように、
> VB.NET用のDLLをこしらえてみることにしました。強引ではありますが、
> DLLの側にバッファをもち、VBとのやり取りはあくまでも値のみの引き渡しですむようにしてみました。

公開してくれるのを楽しみに待ちます。
このスレッドは管理者によってロックされていますので、返信並びに編集は出来ません!
pagetop
タイトル
記事No
投稿日
投稿者
参照先
Re: THW_updateについて
156
2009/08/14(Fri) 23:38:22
JO1SIM 出島

各位
JO1SIM出島です。

構造体の中のポインタをVBとの間でやり取りしなくて済むように、VB.NET用のDLLをこしらえてみることにしました。強引ではありますが、DLLの側にバッファをもち、VBとのやり取りはあくまでも値のみの引き渡しですむようにしてみました。

実験の結果では、Updateが動作するところまでは確認できました。

APIとして公開するにはエラーチェックや、今回のUpdateの件以外の部分も移植したりなんだりと、いろいろ必要なのでちょっと時間がかかりそうです…というより、自作のHAMLOG用SQLツールの改良も並行しているので、そちらにも時間とられてますけど!(笑)

技術的検証は出来ましたので、そう遠くないうちに、VB.NET用のAPIを公開できると思います。ただ、上記の技術検証の結果のように、従来のAPIとは少々違う部分も出てくるかもしれません。


> JO1SIM 出島さん、ありがとうございます。
>
> > rd = THW_read(u_th, u_Rno, 0)
> > rd = THW_read(u_th2, u_Rno, 0)
> > という風に変数間のコピーではなく、2回呼び出してみてはいかがでしょうか?
>
> この事は書かなかったのですが、すでにテスト済みでした。 SRI
> 改めて試しましたが結果は変化無しでした。
このスレッドは管理者によってロックされていますので、返信並びに編集は出来ません!
pagetop
タイトル
記事No
投稿日
投稿者
参照先
Re: THW_updateについてお教えください
155
2009/08/11(Tue) 18:36:12
JO1SIM 出島

ファイル拝見しました。

私がHamlogOpenで四苦八苦していましたが、DLLを呼び出す宣言部分のみ違ったようです。宣言の仕方でDLLの呼び方さえ違うとは…。

肝心の変更されない事象については確認しました。

確認ポイントとして…
THW_readを2回行ってTh、Th2いるのにかかわらず、
Th、Th2の先頭から 821(21+9+7+7+7+4+2?+764)バイト目以降に入っているはずのFreqやModeへのポインタ(6×4バイト?)が2つの構造体で同じになっていないか?ということかなぁと思っています。同じになってしまっていたとすると、ポインタを扱えるDLL側の改良が必要になるかもしれませんです。

まずはご一報まで…

> JO1SIM出島さん、色々とありがとうございます。
>
> > 私もVB.NETでのプログラミングを試そうとしてみましたが、Updateに至る前にHamlogOpenさえうまくいきませんでした。同関数を実行するとメモリ例外が起きてしまう始末…。
> > これは一筋縄ではいきませんね…。
>
> 別便でメールをお送りしました。
> よろしければ私が現在テスト中のソースをお送りしますが。
このスレッドは管理者によってロックされていますので、返信並びに編集は出来ません!
pagetop
タイトル
記事No
投稿日
投稿者
参照先
Re: THW_updateについてお教えください
154
2009/08/11(Tue) 17:41:17
JO1SIM 出島

太田OM

ファイルご送付いただける件、了解しました。
是非拝見させていただきたいと思います。

よろしくお願いします。


> JO1SIM出島さん、色々とありがとうございます。
>
> > 私もVB.NETでのプログラミングを試そうとしてみましたが、Updateに至る前にHamlogOpenさえうまくいきませんでした。同関数を実行するとメモリ例外が起きてしまう始末…。
> > これは一筋縄ではいきませんね…。
>
> 別便でメールをお送りしました。
> よろしければ私が現在テスト中のソースをお送りしますが。
このスレッドは管理者によってロックされていますので、返信並びに編集は出来ません!
pagetop
タイトル
記事No
投稿日
投稿者

Re: THW_updateについてお教えください
153
2009/08/11(Tue) 16:05:25
JA2BQX 太田
JO1SIM出島さん、色々とありがとうございます。

> 私もVB.NETでのプログラミングを試そうとしてみましたが、Updateに至る前にHamlogOpenさえうまくいきませんでした。同関数を実行するとメモリ例外が起きてしまう始末…。
> これは一筋縄ではいきませんね…。

別便でメールをお送りしました。
よろしければ私が現在テスト中のソースをお送りしますが。
このスレッドは管理者によってロックされていますので、返信並びに編集は出来ません!
pagetop
タイトル
記事No
投稿日
投稿者
参照先
Re: THW_updateについてお教えください
152
2009/08/11(Tue) 15:22:58
JO1SIM 出島

JO1SIM出島です。

私もVB.NETでのプログラミングを試そうとしてみましたが、Updateに至る前にHamlogOpenさえうまくいきませんでした。同関数を実行するとメモリ例外が起きてしまう始末…。

これは一筋縄ではいきませんね…。

> JO1SIM 出島さん、こんばんは。
>
> > あと確認するとしたら、データのコピーのあたりですかねぇ。
>
> 下記のDebugプログラムを追加して確認した範囲では、u_th2には修正前のデータが正しくコピーされていることが確認できました。
>
> sd = THW_update(u_th, u_th2, u_Rno, IsQSOdata, mes)
>
> ' 以下は、u_thとu_th2の内容を確認するテスト部分です
>
> Dim Qtbl(16), Qtbl2(16), Tmp As String
> For t As Integer = 0 To 14
> Tmp = Space(160)
> ThwString(Tmp, u_th2, t)
> Qtbl(t) = Item_Edit(Tmp)
> Next
>
> For t As Integer = 0 To 14
> Tmp = Space(160)
> ThwString(Tmp, u_th, t)
> Qtbl2(t) = Item_Edit(Tmp)
> Next
>
> For p As Integer = 0 To 14
> Debug.Print("B4:" & Qtbl(p) & " After:" & Qtbl2(p))
> Next
このスレッドは管理者によってロックされていますので、返信並びに編集は出来ません!
pagetop
タイトル
記事No
投稿日
投稿者

Re: THW_updateについてお教えください
151
2009/08/10(Mon) 21:21:19
JA1RNR 吉田康太郎
JO1SIM 出島さん、こんばんは。

> あと確認するとしたら、データのコピーのあたりですかねぇ。

下記のDebugプログラムを追加して確認した範囲では、u_th2には修正前のデータが正しくコピーされていることが確認できました。

sd = THW_update(u_th, u_th2, u_Rno, IsQSOdata, mes)

' 以下は、u_thとu_th2の内容を確認するテスト部分です

Dim Qtbl(16), Qtbl2(16), Tmp As String
For t As Integer = 0 To 14
Tmp = Space(160)
ThwString(Tmp, u_th2, t)
Qtbl(t) = Item_Edit(Tmp)
Next

For t As Integer = 0 To 14
Tmp = Space(160)
ThwString(Tmp, u_th, t)
Qtbl2(t) = Item_Edit(Tmp)
Next

For p As Integer = 0 To 14
Debug.Print("B4:" & Qtbl(p) & " After:" & Qtbl2(p))
Next
このスレッドは管理者によってロックされていますので、返信並びに編集は出来ません!
pagetop
タイトル
記事No
投稿日
投稿者
参照先
Re: THW_updateについて
150
2009/08/10(Mon) 14:42:57
JO1SIM 出島

ちょっと調べたところ、VB.NET(2008)とDLLの間では、マネージドコードとアンマネージドコードの間でデータの受け渡しをするための宣言が必要ではないかという情報がありました。HAMLOG50.BASの中にある宣言を変える必要があるかもしれません。

自信は全然ありませんが、読み込み部分と更新部分の関数を書き換えるとすると…

Declare Function THW_read Lib "Hamlog50.dll" ( _
h As TThLog, _
ByVal n As Long, ByVal i As Long) As Long

Declare Function THW_update Lib "Hamlog50.dll" ( _
Th As TThLog, _
Th2 As TThLog, _
ByVal r As Long, ByVal f As Long, m As Long) As Long

問う風にでもなるでしょうか?LPStructの辺が違うかもしれません。

いずれにしても、VB.NETの世界とDLLの世界のやり取りを行うための仕組みが何かしら必要だと思います。VB.NETに合わせて、THDLL2VB.DLLに当たる部分を作り直していただければなぁと思います。>作者様



> JO1SIM 出島さん、ありがとうございます。
>
> > rd = THW_read(u_th, u_Rno, 0)
> > rd = THW_read(u_th2, u_Rno, 0)
> > という風に変数間のコピーではなく、2回呼び出してみてはいかがでしょうか?
>
> この事は書かなかったのですが、すでにテスト済みでした。 SRI
> 改めて試しましたが結果は変化無しでした。
このスレッドは管理者によってロックされていますので、返信並びに編集は出来ません!
pagetop
タイトル
記事No
投稿日
投稿者

Re: THW_updateについて
149
2009/08/10(Mon) 12:52:12
JA2BQX 太田
JO1SIM 出島さん、ありがとうございます。

> rd = THW_read(u_th, u_Rno, 0)
> rd = THW_read(u_th2, u_Rno, 0)
> という風に変数間のコピーではなく、2回呼び出してみてはいかがでしょうか?

この事は書かなかったのですが、すでにテスト済みでした。 SRI
改めて試しましたが結果は変化無しでした。
このスレッドは管理者によってロックされていますので、返信並びに編集は出来ません!
pagetop
タイトル
記事No
投稿日
投稿者
参照先
Re: THW_updateについて
148
2009/08/10(Mon) 12:25:25
JO1SIM 出島

太田さん
ヒントありがとうございます。

TQsoBuffのHis以降は実体ではなくてポインタが格納されていることになっているようですね。となると、u_th2にコピーしたのはu_thの中身ではなく、ポインタをコピーしていることになり、事実上、変更後のデータの参照先を一緒にコピーしていることになります。

THW_readの中身がわからないのでちょっと不安ですが…

rd = THW_read(u_th, u_Rno, 0)
rd = THW_read(u_th2, u_Rno, 0)

という風に変数間のコピーではなく、2回呼び出してみてはいかがでしょうか?



> こんにちは。
>
> > th2 = th ではダメなんでしょうか?(笑)
>
> これもすでに試してはいますが結果は同じでした。
>
> その後のテストで Code 、 G/L 、 QSLは変わります。
>
> HAMLOG50.H の中身を見ています。下記を見ると
>
> WORD
> Flag1; ..以下が変わらない項目と合います。
> THW5になってから項目の桁数を変更出来るようになりました。
>
> VB以外は分からないので、ここから先に手が付きません。
>
> 改行制御が上手く出来ていない投稿で冗長で済みません。
>
> typedef
> struct
>
>
> {char
> Calls[21],
>
>
>
> Date[9],
> //
> 04/08/20
>
>
>
> Time[7],
> //
> 10:20J
>
>
>
> Code[7],
>
>
>
> Glid[7],
>
>
>
> Qsl[4];
>
> //
> Qsl, Send, Rcv ここまでで57バイト
>
> WORD
> Flag1;
>
> char
> Hiss[764];
> //
> 13
>
> char
> *Myrs,
>
> //
> 13
>
>
>
> *Freq,
>
> //
> 17
>
>
>
> *Mode,
>
> //
> 17
>
>
>
> *Name,
>
> //
> 65
>
>
>
> *Qth,
>
> //
> 129
>
>
>
> *Rmk1,
>
> //
> 255
>
>
>
> *Rmk2;
>
> //
> 255
>
> BYTE
> HissLen, MyrsLen, FreqLen, ModeLen, NameLen, QthLen, Rmk1Len, Rmk
> 2Len;}
>
> TQsoBuff;
このスレッドは管理者によってロックされていますので、返信並びに編集は出来ません!
pagetop