一括表示

VB2010 Th521api cmmd = 119 投稿者:JA2BQX 太田 

お世話になります。
先程の「Th521APIアップしました 」で上手く動作した cmmd = 119 は
VB6 でのコードでした。

VB2010で URL のページの「ソース1  2009.08.17 getHamlog」にコードを追加して
試しています。 
cmmd = 118 は上手く動作しましたが cmmd = 119 が上手く行きません。

cds.cbData  と cds.lpData のセットの仕方がVB6とVB2010では
異なるからなのかも知れませんが、どなたかご指導いただければ幸いです。

http://ja2bqx.web.fc2.com/VbNet/VbNet.html

( 注 ) URLがERRORになるために一部全角にしてありますが実際には全て半角です。


------ 一部抜粋 -----

Dim cds As COPYDATASTRUCT
Private Const WM_COPYDATA = &H4A
<VBFixedString(256)> Dim cbuff As String



' Th521api で追加されたコマンド
' 119 = lpDataにレコード番号の文字列へのポインタを渡すと、そのレコード番号の
' データの、コールサインからRemarks2までが、それぞれ改行されたテキス
' トとして得ることができる。指定レコード番号が範囲外の場合は、最終レ
'    コード番号のデータ。(v5.20b)

cmmd = 119
cds.dwData = cmmd

'cds.cbData = 0

'cds.cbData = 0 だと最終レコードを表示する。 他では表示されない??

cbuff = "32959" '指定レコード番号

cds.cbData = Microsoft.VisualBasic.Strings.Len(cbuff) ' 文字列の長さ

cds.lpData = cbuff

Hwnd2 = SendMessage(Hwnd1, WM_COPYDATA, Me.Handle, cds)

2012/10/13(Sat) 15:00:42  [No.311]


Re: VB2010 Th521api cmmd = 119 投稿者:JJ8LSI 水本 

> お世話になります。
> 先程の「Th521APIアップしました 」で上手く動作した cmmd = 119 は
> VB6 でのコードでした。
>
> VB2010で URL のページの「ソース1  2009.08.17 getHamlog」にコードを追加して
> 試しています。 
> cmmd = 118 は上手く動作しましたが cmmd = 119 が上手く行きません。
>
> cds.cbData  と cds.lpData のセットの仕方がVB6とVB2010では
> 異なるからなのかも知れませんが、どなたかご指導いただければ幸いです。
>
> http://ja2bqx.web.fc2.com/VbNet/VbNet.html
>
> ( 注 ) URLがERRORになるために一部全角にしてありますが実際には全て半角です。
>
>
> ------ 一部抜粋 -----
>
> Dim cds As COPYDATASTRUCT
> Private Const WM_COPYDATA = &H4A
> <VBFixedString(256)> Dim cbuff As String
>
>
>
> ' Th521api で追加されたコマンド
> ' 119 = lpDataにレコード番号の文字列へのポインタを渡すと、そのレコード番号の
> ' データの、コールサインからRemarks2までが、それぞれ改行されたテキス
> ' トとして得ることができる。指定レコード番号が範囲外の場合は、最終レ
> '    コード番号のデータ。(v5.20b)
>
> cmmd = 119
> cds.dwData = cmmd
>
> 'cds.cbData = 0
>
> 'cds.cbData = 0 だと最終レコードを表示する。 他では表示されない??
>
> cbuff = "32959" '指定レコード番号
>
> cds.cbData = Microsoft.VisualBasic.Strings.Len(cbuff) ' 文字列の長さ
>
> cds.lpData = cbuff
>
> Hwnd2 = SendMessage(Hwnd1, WM_COPYDATA, Me.Handle, cds)

はじめまして

マネージメモリ配下なので
アンマネージメモリではない
よって

Public lpData As IntPtr->Public lpData As String

ついでに戻りにおいても

TextBox1.Text = Marshal.PtrToStringAnsi(cds.lpData)
なってましたが
TextBox1.Text = cds.lpData
になります

VBは10年以上触ってませんでしたが、Expressはどうなのか
興味があって動作させてみました
コメント文に手こずりますね VBは つい//としてしまう
最後;をつける癖が

おそらく動作すると思います
VB2010で動作確認してみました

と宣言下さい

2012/10/13(Sat) 20:09:11  [No.312]


Re: VB2010 Th521api cmmd = 119 投稿者:JA2BQX 太田 

おかげさまでWinXpでのVB2010とWin7(64bit版)のVB2010でも cmmd = 119 は出来ました。


続けてで恐縮ですが、下記はWinXpでのVB2010では動くのですが
Win7(64bit版)では、
cmmd = 27 でクローズしてから Hamlog.dx0 をオープンしようとすると
「間違ったフォーマットのプログラムを読み込もうとしました」のエラ−が出てしまいます。(VB6ではOKだが...)

どこかおかしなところがあればご指摘をお願いします。


Structure TIDXh ' インデックスファイル用
Dim p As Int32
Dim fHdl As Int32
<VBFixedArray(260), System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.ByValArray, SizeConst:=260)> Dim Temp() As Byte
Public Sub Initialize()
ReDim Temp(260)
End Sub
End Structure

Declare Function idx_open Lib "Hamlog50.dll" (ByVal s As String, ByRef p As TIDXh) As Int32
Declare Sub idx_close Lib "Hamlog50.dll" (ByRef p As TIDXh)
Declare Function idx_search Lib "Hamlog50.dll" (ByRef p As TIDXh, ByVal s As String, ByVal l As Int32) As Int32
Declare Function idx_next Lib "Hamlog50.dll" (ByRef p As TIDXh) As Int32

Public THindx As TIDXh

(idx_open , idx_search , idx_next , idx_close も同じエラーが出る)

Ret = idx_open("C:\Hamlog\Hamlog.dx0", THindx) 'DbsCallDX でQSOデータ、コールサイン順(*.DX0)

2012/10/13(Sat) 22:05:20  [No.314]


Re: VB2010 Th521api cmmd = 119 投稿者:JJ8LSI 水本 

> おかげさまでWinXpでのVB2010とWin7(64bit版)のVB2010でも cmmd = 119 は出来ました。
>
>
> 続けてで恐縮ですが、下記はWinXpでのVB2010では動くのですが
> Win7(64bit版)では、
> cmmd = 27 でクローズしてから Hamlog.dx0 をオープンしようとすると
> 「間違ったフォーマットのプログラムを読み込もうとしました」のエラ−が出てしまいます。(VB6ではOKだが...)
>
> どこかおかしなところがあればご指摘をお願いします。
>
>
> Structure TIDXh ' インデックスファイル用
> Dim p As Int32
> Dim fHdl As Int32
> <VBFixedArray(260), System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.ByValArray, SizeConst:=260)> Dim Temp() As Byte
> Public Sub Initialize()
> ReDim Temp(260)
> End Sub
> End Structure
>
> Declare Function idx_open Lib "Hamlog50.dll" (ByVal s As String, ByRef p As TIDXh) As Int32
> Declare Sub idx_close Lib "Hamlog50.dll" (ByRef p As TIDXh)
> Declare Function idx_search Lib "Hamlog50.dll" (ByRef p As TIDXh, ByVal s As String, ByVal l As Int32) As Int32
> Declare Function idx_next Lib "Hamlog50.dll" (ByRef p As TIDXh) As Int32
>
> Public THindx As TIDXh
>
> (idx_open , idx_search , idx_next , idx_close も同じエラーが出る)
>
> Ret = idx_open("C:\Hamlog\Hamlog.dx0", THindx) 'DbsCallDX でQSOデータ、コールサイン順(*.DX0)

読むだけならHAMLOGとプログラムがデータをシェアのフラグを立ててれば27,28のコマンドは必要ないと思います

当方はWindows7HOME64bitですが

HAMLOG共有オープンしていない場合やってみました

Hwnd1 = FindWindow("TThwin", vbNullString)
'// Hwnd1 = FindWindow("#32770", vbNullString)
If Hwnd1 < 1 Then ' ハムログが起動していない
Exit Sub
End If

Dim cds As COPYDATASTRUCT
cmmd = 27
cds.dwData = cmmd
cbuff = vbNullString
cds.cbData = 0
cds.lpData = ""
Hwnd2 = SendMessage(Hwnd1, WM_COPYDATA, Me.Handle, cds)
Ret = idx_open("Hamlog.dx0", THindx)
Ret = idx_search(THindx, "------", 0)
-----はコールサインで

Windows764bitで動作しました
レコード番号も返ってきてます

質問のエラーが不明です
ファンクションの戻り値を質問に書くと良いんですがね

2012/10/13(Sat) 23:19:06  [No.315]


Re: VB2010 Th521api cmmd = 119 投稿者:JA2BQX 太田 

JJ8LSI 水本さん、ありがとうございます。

ビルド 構成マネージャー プラットフォームを Any CPU から x86 に変更したらエラーが出なくなり
おかげさまでWin7 Home 64bit版のパソコンでVB2010でも
idx_open , idx_search , idx_next , idx_close を使用して
レコード番号を取得出来るようになりました。  

SetDbsShare に関しては改めて試してみようと思います。 MNI TNX

2012/10/14(Sun) 07:23:48  [No.318]


Re: VB2010 Th521api cmmd = 119 投稿者:JJ8LSI 水本 

> idx_open , idx_search , idx_next , idx_close を使用して
> レコード番号を取得出来るようになりました。  

こちらに結果書いていたんですね
お疲れ様でした

2012/10/14(Sun) 13:11:11  [No.320]


Re: VB2010 Th521api cmmd = 119 投稿者:JJ8LSI 水本 

>
> 「間違ったフォーマットのプログラムを読み込もうとしました」のエラ−が出てしまいます。(VB6ではOKだが...)
>
ネットで調べてみると
64bitでコンパイルしたものから32bitのDLLをコールすると出るようですね

前記で
答えは出島OMが記述したとおりだと思いますけど
前記の質問でExpressと書いていたので、64bitコンパイルではなく32bitでコンパイルされているはずなんで不思議です

その状態であれば、HAMLOG50.DLLはすべてコールできないと思います

VB2010はインストールしたままの状態でのテストしました
Expressには64bitでコンパイルするオプションは見つけれませんでした

2012/10/14(Sun) 00:21:42  [No.316]


Re: VB2010 Th521api cmmd = 119 投稿者:JA2BQX 太田 

JJ8LSI 水本さん、ありがとうございます。
NO 315で お返事をいただいた件はもう少し時間を下さい。
今日、これからテストしてみます。

> VB2010はインストールしたままの状態でのテストしました
> Expressには64bitでコンパイルするオプションは見つけれませんでし


私の書き方が悪かったのでしょうね。パソコンがWin7の64Bit版であるというだけで
VB2010 Express のコンパイルは Any CPU となっていまして 32 Bit でしょうね。
 

2012/10/14(Sun) 06:51:38  [No.317]


Re: VB2010 Th521api cmmd = 119 投稿者:JJ8LSI 水本 

> JJ8LSI 水本さん、ありがとうございます。
> NO 315で お返事をいただいた件はもう少し時間を下さい。
> 今日、これからテストしてみます。
>
> > VB2010はインストールしたままの状態でのテストしました
> > Expressには64bitでコンパイルするオプションは見つけれませんでし
> た
>
> 私の書き方が悪かったのでしょうね。パソコンがWin7の64Bit版であるというだけで
> VB2010 Express のコンパイルは Any CPU となっていまして 32 Bit でしょうね。
>  

MSDNのドキュメントでは
http://msdn.microsoft.com/ja-jp/library/5b4eyb0k.aspx

前記でx86を選べと書いていましたが、やってないということでしょうかね


数日前にVB2010をインストールしたものは
詳細コンパイルオプションまででるが
それ以降のビルドの詳細設定が出てこないので
説明できませんけど

素直にx86にしては如何でしょう

2012/10/14(Sun) 12:48:53  [No.319]


Re: VB2010 Th521api cmmd = 119 投稿者:JJ8LSI 水本 

> お世話になります。
> 先程の「Th521APIアップしました 」で上手く動作した cmmd = 119 は
> VB6 でのコードでした。
>
> VB2010で URL のページの「ソース1  2009.08.17 getHamlog」にコードを追加して
> 試しています。 
> cmmd = 118 は上手く動作しましたが cmmd = 119 が上手く行きません。
>
> cds.cbData  と cds.lpData のセットの仕方がVB6とVB2010では
> 異なるからなのかも知れませんが、どなたかご指導いただければ幸いです。
>
> http://ja2bqx.web.fc2.com/VbNet/VbNet.html
>
> ( 注 ) URLがERRORになるために一部全角にしてありますが実際には全て半角です。
>
>
> ------ 一部抜粋 -----
>
> Dim cds As COPYDATASTRUCT
> Private Const WM_COPYDATA = &H4A
> <VBFixedString(256)> Dim cbuff As String
>
>
>
> ' Th521api で追加されたコマンド
> ' 119 = lpDataにレコード番号の文字列へのポインタを渡すと、そのレコード番号の
> ' データの、コールサインからRemarks2までが、それぞれ改行されたテキス
> ' トとして得ることができる。指定レコード番号が範囲外の場合は、最終レ
> '    コード番号のデータ。(v5.20b)
>
> cmmd = 119
> cds.dwData = cmmd
>
> 'cds.cbData = 0
>
> 'cds.cbData = 0 だと最終レコードを表示する。 他では表示されない??
>
> cbuff = "32959" '指定レコード番号
>
> cds.cbData = Microsoft.VisualBasic.Strings.Len(cbuff) ' 文字列の長さ
>
> cds.lpData = cbuff
>
> Hwnd2 = SendMessage(Hwnd1, WM_COPYDATA, Me.Handle, cds)

ついでに
stringはUnicodeなんでわざわざ文字列変換してC#で動作しませんでした
変換せずに送ると受け取るみたいでした
VC++6.0でSendMesageを受けてみたらAPIの方で変換しているような動きでした あまり詳しく調べてないので返答には困りますが
VC++2010ではUTF-16で処理しています
読むには気になりませんね HAMLOGでSJISですが内部でコード変換しているようです HAMLOGへ書き込む時はコード変換しています

2012/10/13(Sat) 20:24:34  [No.313]