一括表示

THW_updateについてお教えください 投稿者:JA1RNR 吉田康太郎 

例によってVB2008でHamlog50.DLLとThdll2Vb.dllを使って、Hamlogデータの修正プログラムを作成しています。

今回のプログラムは、THW_updateでHamlogQSOデータを修正しようとするものですが、つぎのように一部のデータ項目が修正できません。

1.修正できない項目は、Hamlogのデータ項目名で表すと

My, Freq, Mode, Name, QTH, Remarks1, Remarks2の7項目です。

上記の各項目は、TextBox上でデータが変更されているにもかかわらず、データに変更がないときと同じ動作です。THW_updateの戻り値は SUCCESS = 0 です。修正時の確認画面は表示されません。

2.他のデータ項目の、Call, Date, Time, His, Code, G.L, QSLの7項目は正しく修正できます。修正時の確認画面も表示されます。


このプログラムのどこに問題がありましょうか。ご教示いただければ幸いです。


このプログラムでは、あらかじめHamlogから読み込んだデータをTextBoxに入れ、TextBoxのデータを修正した後、下のプログラムでHamlogQSOデータを修正しようとしています。

===================問題のプログラム============================

Dim DataTbl(14) As String  ' 各QSOデータを格納
Dim th As TThLog
Dim th2 As TThLog
Dim Rno As Integer

Rno = Val(Me.TextBox15.Text) ' 修正対象データ番号を入力する

Hamlog_Update(th, th2, DataTbl, Rno) ' 修正プログラムの呼び出し

-----------------修正プログラム----------------------------------

Private Sub Hamlog_Update(ByRef u_th As TThLog, ByRef u_th2 As TThLog, ByVal u_DataTbl() As String, ByVal u_Rno As Integer)

Dim rd, sd As Integer, UpdateQsoData As String

rd = THW_read(u_th, u_Rno, 0)

u_th2.Qso = u_th.Qso ' 修正前のデータを格納

Text_to_Table_Set(u_DataTbl) ' 修正後のTextBoxのデータを配列に格納

For d As Integer = 0 To 14
UpdateQsoData = u_DataTbl(d)
SetThBuffer(u_th, UpdateQsoData, d)
Next

sd = THW_update(u_th, u_th2, u_Rno, IsQSOdata, 0)
If sd = SUCCESS Then
Me.Label3.Text = "データ番号 " & u_Rno & " 修正完了"
Else
Me.Label3.Text = "修正に失敗しました。"
End If

End Sub
---------------ここまでが修正プログラムです-----------------

以下の部分は上で使っているSubとFunctionの定義です

Public Function Item_Edit(ByVal Rec As String) As String

Dim RLeng As Integer
Dim Item As String

Rec = Rec.Replace(Chr(0), " ")
Rec = Rec.Trim
RLeng = Rec.Length
Item = Rec.Substring(0, RLeng)

Return Item

End Function

Public Sub Text_to_Table_Set(ByVal DataTbl() As String)

Array.Clear(DataTbl, 0, 16)
DataTbl(0) = Item_Edit(Me.TextBox1.Text.ToUpper)
DataTbl(1) = Item_Edit(Me.TextBox1.Text.ToUpper)
DataTbl(2) = Item_Edit(Me.TextBox2.Text.ToUpper)
DataTbl(3) = Item_Edit(Me.TextBox3.Text.ToUpper)
DataTbl(4) = Item_Edit(Me.TextBox4.Text.ToUpper)
DataTbl(5) = Item_Edit(Me.TextBox5.Text.ToUpper)
DataTbl(6) = Item_Edit(Me.TextBox6.Text.ToUpper)
DataTbl(7) = Item_Edit(Me.TextBox7.Text.ToUpper)
DataTbl(8) = Item_Edit(Me.TextBox8.Text.ToUpper)
DataTbl(9) = Item_Edit(Me.TextBox9.Text.ToUpper)
DataTbl(10) = Item_Edit(Me.TextBox10.Text.ToUpper)
DataTbl(11) = Item_Edit(Me.TextBox11.Text)
DataTbl(12) = Item_Edit(Me.TextBox12.Text)
DataTbl(13) = Item_Edit(Me.TextBox13.Text)
DataTbl(14) = Item_Edit(Me.TextBox14.Text)

End Sub

2009/08/08(Sat) 13:44:49  [No.136]


こんにちは。
VB6ではupdateは上手く動作しています。
VB2008でテストしていますが吉田さんと同じ症状になり
まだ解決していません。

2009/08/09(Sun) 13:54:29  [No.137]


Re: THW_updateについてお教えください 投稿者:JA1RNR 吉田康太郎 

JA2BQX 太田さん

こんにちは、暑い日が続きます。

> VB2008でテストしていますが吉田さんと同じ症状になり
> まだ解決していません。

同じ症状ですか。解決方法がありましたらご教示いただければ幸いです。

2009/08/09(Sun) 16:35:48  [No.138]


吉田さんのコードをコピーして実行してみました。
同じ症状です。。。。コードをコピーしてるのだから当たり前?ですね。Hi
でも、更新出来るデータと出来ないデータがあるというのが解せないです。
お手上げです。(^。^;)

2009/08/09(Sun) 23:05:04  [No.139]


吉田さん
みなさんこんにちは。

VBで開発してないので良くはわかりませんが…

同じデータでUpdateではなくAppendで追加したらどうなるでしょうか?

問題がUpdateの中にあるのか、それとも更新しようとしているデータに有るのか分かるかもしれません。VB6で動いていて2008だとダメとなると、データの構造の違い等に問題があるような気がしますね。

VBとしての言語は良く似てても、動かす仕組みはだいぶ違うはずなので…。

2009/08/10(Mon) 00:45:23  [No.140]


補足です…

SetThBufferに与えるUpdateQsoDataがString型なのですが、受けとる側では const char *のようなので、この辺で不一致が生じているかもしれません。

UpdateQsoDataはByte()で定義して…

bytesData = System.Text.Encoding.GetEncoding(932).GetBytes(u_DataTbl(d))
' 932はShift_JISの意味

のようにして、ShiftJISのバイト列に変換してSetThBufferに与えてみてはいかがでしょうか?ただ、これが正しいとなると、読み込み側でも問題が発生していた可能性があるので、上記と逆の作業をしなければならないと思います。(バイト列からStringに変換する)

Stringクラスとバイト列の変換方法は、下記のリンクに乗っていました。

http://dobon.net/vb/dotnet/string/getencoding.html



> 吉田さん
> みなさんこんにちは。
>
> VBで開発してないので良くはわかりませんが…
>
> 同じデータでUpdateではなくAppendで追加したらどうなるでしょうか?
>
> 問題がUpdateの中にあるのか、それとも更新しようとしているデータに有るのか分かるかもしれません。VB6で動いていて2008だとダメとなると、データの構造の違い等に問題があるような気がしますね。
>
> VBとしての言語は良く似てても、動かす仕組みはだいぶ違うはずなので…。

2009/08/10(Mon) 02:48:31  [No.141]


Re: THW_updateについてお教えください 投稿者:JA1RNR 吉田康太郎 

JO1SIM 出島さん、おはようございます。

同じデータをUpdateではなくAppendで追加するときは、正常に追加できます。

> UpdateQsoDataはByte()で定義して…
>
> bytesData = System.Text.Encoding.GetEncoding(932).GetBytes(u_DataTbl(d))
> ' 932はShift_JISの意味
>
> のようにして、ShiftJISのバイト列に変換してSetThBufferに与えてみてはいかがでし>>ょうか?

試みに、SetThBufferの定義部分の第二引数をバイト配列型に変更して

Dim UpdateQsoData As Byte()

For d As Integer = 0 To 14
UpdateQsoData = System.Text.Encoding.GetEncoding(932).GetBytes(u_DataTbl(d))
SetThBuffer(u_th, UpdateQsoData, d)
Next

としてShiftJISのバイト列に変換してSetThBufferに与えてみとしましたが、結果はstring型の場合と同じで、修正できるデータ項目と修正できないデータ項目はまったく同一でした。

2009/08/10(Mon) 11:19:53  [No.145]


吉田さん
おはようござます。

Byte()に変更しても同じだったのですね。
THDLL2VB.DLL側には問題ないということみたいですね…。

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

> JO1SIM 出島さん、おはようございます。
>
> 同じデータをUpdateではなくAppendで追加するときは、正常に追加できます。
>
> > UpdateQsoDataはByte()で定義して…
> >
> > bytesData = System.Text.Encoding.GetEncoding(932).GetBytes(u_DataTbl(d))
> > ' 932はShift_JISの意味
> >
> > のようにして、ShiftJISのバイト列に変換してSetThBufferに与えてみてはいかがでし>>ょうか?
>
> 試みに、SetThBufferの定義部分の第二引数をバイト配列型に変更して
>
> Dim UpdateQsoData As Byte()
>
> For d As Integer = 0 To 14
> UpdateQsoData = System.Text.Encoding.GetEncoding(932).GetBytes(u_DataTbl(d))
> SetThBuffer(u_th, UpdateQsoData, d)
> Next
>
> としてShiftJISのバイト列に変換してSetThBufferに与えてみとしましたが、結果はstring型の場合と同じで、修正できるデータ項目と修正できないデータ項目はまったく同一でした。

2009/08/10(Mon) 11:44:23  [No.147]


Re: THW_updateについてお教えください 投稿者: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

2009/08/10(Mon) 21:21:19  [No.151]


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

2009/08/11(Tue) 15:22:58  [No.152]


JO1SIM出島さん、色々とありがとうございます。

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

別便でメールをお送りしました。
よろしければ私が現在テスト中のソースをお送りしますが。

2009/08/11(Tue) 16:05:25  [No.153]


太田OM

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

よろしくお願いします。


> JO1SIM出島さん、色々とありがとうございます。
>
> > 私もVB.NETでのプログラミングを試そうとしてみましたが、Updateに至る前にHamlogOpenさえうまくいきませんでした。同関数を実行するとメモリ例外が起きてしまう始末…。
> > これは一筋縄ではいきませんね…。
>
> 別便でメールをお送りしました。
> よろしければ私が現在テスト中のソースをお送りしますが。

2009/08/11(Tue) 17:41:17  [No.154]


ファイル拝見しました。

私が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さえうまくいきませんでした。同関数を実行するとメモリ例外が起きてしまう始末…。
> > これは一筋縄ではいきませんね…。
>
> 別便でメールをお送りしました。
> よろしければ私が現在テスト中のソースをお送りしますが。

2009/08/11(Tue) 18:36:12  [No.155]


Re: THW_updateについて 投稿者:JA2BQX 太田 

みなさんこんにちは。

> 同じデータでUpdateではなくAppendで追加したらどうなるでしょうか?

吉田さんのコードを流用して THW_Append のテストをして見ました。
全項目が反映されたQSOデータが追加されますので SetThBuffer の
使い方に関しては問題無いように思えるのですが、今のところ
THW_update ではHisまでは書き換わりますが、My以降が変わらないです。

2009/08/10(Mon) 08:44:26  [No.142]


Re: THW_updateについて 投稿者:JA2BQX 太田 

Call , Date , Time , His を変更した場合には「データを登録してよろしいですか?」の確認 MessageBox が表示されますが、
My から Remarks2 のみを変更した場合には確認 MessageBox が表示されません。
内容が変更されたと判断されない....??

HAMLOG50.txt の THW_update の説明に
Th2
比較用のTurbo HAMLOGデータアクセス構造体。あらかじめ変更前のTh の内容をコピーしておく...とありますが
上手くコピーされていないと言うことなのでしょうか?

th2.Qso = th.Qso ' 修正前のデータを格納
....実行後のth2の内容を Call ThwString を使い確認するとOKと思うのですが。

JO1SIM 出島さんの

> SetThBufferに与えるUpdateQsoDataがString型なのですが、受けとる側では const char *のようなので、
> この辺で不一致が生じているかもしれません。

...に対処するのが Hamlog50.DLLとThdll2Vb.dll だと思っていますがまだ解決には至りません。

2009/08/10(Mon) 09:10:44  [No.143]


Re: THW_updateについて 投稿者:JO1SIM 出島  《URL》  

Appendがうまくいっているということは、Updateに特有の不具合ということになりますね…。

比較用データがちゃんとコピーされているかどうかを見るには、thとth2の両方をAppendしてみて、th2にコピーがちゃんとされているかをご覧になってはいかがでしょうか?

> th2.Qso = th.Qso ' 修正前のデータを格納

th2 = th ではダメなんでしょうか?(笑)

コピー動作がうまくいっていることを確認するには、th、th2とも完全にクリアしておいたほうがいいと思います。(Space等で埋める)

> ...に対処するのが Hamlog50.DLLとThdll2Vb.dll だと思っていますがまだ解決には至りません。

thdll2bv.dllのソースを見たところ、ThwStringとSetThBufferはHamlog50.dllを呼び出していませんでした。VB2008側の問題であるならですが、本関数を使わずにVBで代わりの操作が必要になるかもしれません。






> Call , Date , Time , His を変更した場合には「データを登録してよろしいですか?」の確認 MessageBox が表示されますが、
> My から Remarks2 のみを変更した場合には確認 MessageBox が表示されません。
> 内容が変更されたと判断されない....??
>
> HAMLOG50.txt の THW_update の説明に
> Th2
> 比較用のTurbo HAMLOGデータアクセス構造体。あらかじめ変更前のTh の内容をコピーしておく...とありますが
> 上手くコピーされていないと言うことなのでしょうか?
>
> th2.Qso = th.Qso ' 修正前のデータを格納
> ....実行後のth2の内容を Call ThwString を使い確認するとOKと思うのですが。
>
> JO1SIM 出島さんの
>
> > SetThBufferに与えるUpdateQsoDataがString型なのですが、受けとる側では const char *のようなので、
> > この辺で不一致が生じているかもしれません。
>
> ...に対処するのが Hamlog50.DLLとThdll2Vb.dll だと思っていますがまだ解決には至りません。

2009/08/10(Mon) 10:48:29  [No.144]


Re: THW_updateについて 投稿者:JA2BQX 太田 

こんにちは。

> 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;

2009/08/10(Mon) 11:39:57  [No.146]


Re: THW_updateについて 投稿者:JO1SIM 出島  《URL》  

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

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;

2009/08/10(Mon) 12:25:25  [No.148]


Re: THW_updateについて 投稿者:JA2BQX 太田 

JO1SIM 出島さん、ありがとうございます。

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

この事は書かなかったのですが、すでにテスト済みでした。 SRI
改めて試しましたが結果は変化無しでした。

2009/08/10(Mon) 12:52:12  [No.149]


Re: THW_updateについて 投稿者:JO1SIM 出島  《URL》  

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

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

Declare Function THW_read Lib "Hamlog50.dll" ( _
<MarshalAs(UnmanagedType.LPStruct)> h As TThLog, _
ByVal n As Long, ByVal i As Long) As Long

Declare Function THW_update Lib "Hamlog50.dll" ( _
<MarshalAs(UnmanagedType.LPStruct)> Th As TThLog, _
<MarshalAs(UnmanagedType.LPStruct)> 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
> 改めて試しましたが結果は変化無しでした。

2009/08/10(Mon) 14:42:57  [No.150]


Re: THW_updateについて 投稿者:JO1SIM 出島  《URL》  

各位
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
> 改めて試しましたが結果は変化無しでした。

2009/08/14(Fri) 23:38:22  [No.156]


Re: THW_updateについて 投稿者:JA2BQX 太田 

こんにちは。

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

公開してくれるのを楽しみに待ちます。

2009/08/15(Sat) 06:02:19  [No.157]


Re: THW_updateについて 投稿者:JA1RNR 吉田康太郎 

JO1SIM出島さん、こんにちは。

> 実験の結果では、Updateが動作するところまでは確認できました。
>
>APIとして公開するにはエラーチェックや、今回のUpdateの件以外の部分も移植したりなんだりと、いろいろ必要なのでちょっと時間がかかりそうです・・・・

大いに期待しております。ぜひ公開いただきますようお待ちしています。

2009/08/15(Sat) 15:04:29  [No.158]


Re: THW_updateについて 投稿者:JO1SIM 出島  《URL》  

JO1SIM 出島です。

説明書が間に合っていないので不親切極まりないのではありますが、一応新APIセットを私のHPからダウンロードできるようにしました。トップ画面の右下のほうに「Hamlog50.dllをVB.NET…」と書いてありますので、そこからダウンロードしてみてください。

説明書はもう少々お時間くださいです。
すみません…。

簡単な使い方ですが、TThLogで定義していた箇所を数値の「ハンドル」で指定してする方法に変わっています。それから、APIの使用前後に使用開始と使用終了の関数呼び出しが必要になります。

まずは、サンプルを入れてみましたのでご覧ください。
(サンプルは太田OMから頂いたファイルを参考にしています。TNX!!)


> 各位
> 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
> > 改めて試しましたが結果は変化無しでした。

2009/08/19(Wed) 01:33:22  [No.160]


Re: THW_updateについて 投稿者:JA2BQX 太田  《URL》  

JO1SIM 出島さん、ありがとうございます。

> 説明書が間に合っていないので不親切極まりないのではありますが、一応新APIセットを私のHPからダウンロードできるようにしました。トップ画面の右下のほうに「Hamlog50.dllをVB.NET…」と書いてありますので、そこからダウンロードしてみてください。

早速試させていただきました。
私のHPにもテスト用ソースをおきました。

2009/08/19(Wed) 10:22:56  [No.161]


Re: THW_updateについて 投稿者:JA1RNR 吉田康太郎 

JO1SIM 出島さん、こんにちは。

> まずは、サンプルを入れてみましたのでご覧ください。
> (サンプルは太田OMから頂いたファイルを参考にしています。TNX!!)

早速ダウンロードして、UpDateプログラムを完成させました。すべてのデータ項目のUpDateを確認しました。
快調に動作しています。

大変有り難うございました、ご尽力に感謝申し上げます。

まずは、ご一報まで。    VY TNX

2009/08/19(Wed) 11:41:43  [No.162]


Re: THW_updateについて 投稿者:JO1SIM 出島  《URL》  

吉田OM

うまくいったということで、ほっとしております。。
Update以外の個所はあまり確認していない部分もあるので、何か不具合があるようでしたらご連絡ください!


> JO1SIM 出島さん、こんにちは。
>
> > まずは、サンプルを入れてみましたのでご覧ください。
> > (サンプルは太田OMから頂いたファイルを参考にしています。TNX!!)
>
> 早速ダウンロードして、UpDateプログラムを完成させました。すべてのデータ項目のUpDateを確認しました。
> 快調に動作しています。
>
> 大変有り難うございました、ご尽力に感謝申し上げます。
>
> まずは、ご一報まで。    VY TNX

2009/08/19(Wed) 21:27:17  [No.164]


Re: THW_updateについて 投稿者:JA1RNR 吉田康太郎 

JO1SIM 出島さん、こんばんは。

Updateに関してですが、

THW_read(Th, u_Rno, 0)

THWVB_CopyBuffer(Th2, Th)

For d As Integer = 0 To 14
UpdateQsoData = u_DataTbl(d)
THWVB_SetBuffer(Th, UpdateQsoData, d)
Next

sd = THW_update(Th, Th2, u_Rno, IsQSOdata, 0)

とするだけで、Updateできましたが何か問題が生じましょうか。

つまり、Th2側への読み込み処理(THW_read(Th2, u_Rno, 0))を行わなくても一見正常にUpdateできています。????

2009/08/19(Wed) 23:07:36  [No.165]


Re: THW_updateについて 投稿者:JO1SIM 出島  《URL》  

吉田OM
JO1SIMでしまです。こんばんは。

実際の結果については、実行してみていただいた結果がすべてではあるのですが、仕組み上、THW_readした結果をTHWVB_CopyBufferでコピーすると、以前の「Updateされない」項目のチェックがうまくいかなくなるかもしれません。

ThとTh2が異なる場合、ダイアログが出て「データを登録してよろしいですか?」と出るはずですが、以前の「Updateされない」項目のみの変更の場合、これが出ずにUpdateされるかもしれません。

といっても、Hamlog50.dllの説明書でも丸ごとコピーしているようなので、吉田OMの方法でOKであれば、まったく問題ないと思います!


> JO1SIM 出島さん、こんばんは。
>
> Updateに関してですが、
>
> THW_read(Th, u_Rno, 0)
>
> THWVB_CopyBuffer(Th2, Th)
>
> For d As Integer = 0 To 14
> UpdateQsoData = u_DataTbl(d)
> THWVB_SetBuffer(Th, UpdateQsoData, d)
> Next
>
> sd = THW_update(Th, Th2, u_Rno, IsQSOdata, 0)
>
> とするだけで、Updateできましたが何か問題が生じましょうか。
>
> つまり、Th2側への読み込み処理(THW_read(Th2, u_Rno, 0))を行わなくても一見正常にUpdateできています。????

2009/08/19(Wed) 23:42:35  [No.166]


Re: THW_updateについて 投稿者:JA1RNR 吉田康太郎 

JO1SIM 出島さん
おはようございます。

> ・・・・、以前の「Updateされない」項目のみの変更の場合、これが出ずにUpdateされるかもしれません。


私が行った方法では、すべてのデータ項目を変更なしでUpdataしたときは確かに、確認のダイアログ画面が表示されずにUpdate完了します。

現在までのテスト結果では、格別異常は出ていませんのでもう少しいろいろテストしてみることにいたします。

有り難うございました。



2009/08/20(Thu) 07:00:56  [No.167]