Back
一括表示
タイトル
記事No
投稿日
投稿者
: VB2010 Th521api cmmd = 119
: 311
: 2012/10/13(Sat) 15:00:42
: 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
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)
このスレッドは管理者によって ロック されていますので、返信並びに編集は出来ません!
タイトル
記事No
投稿日
投稿者
: Re: VB2010 Th521api cmmd = 119
: 312
: 2012/10/13(Sat) 20:09:11
: 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 > 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で動作確認してみました
と宣言下さい
このスレッドは管理者によって ロック されていますので、返信並びに編集は出来ません!
タイトル
記事No
投稿日
投稿者
: Re: VB2010 Th521api cmmd = 119
: 314
: 2012/10/13(Sat) 22:05:20
: 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 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)
このスレッドは管理者によって ロック されていますので、返信並びに編集は出来ません!
タイトル
記事No
投稿日
投稿者
: Re: VB2010 Th521api cmmd = 119
: 315
: 2012/10/13(Sat) 23:19:06
: 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 > 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で動作しました レコード番号も返ってきてます 質問のエラーが不明です ファンクションの戻り値を質問に書くと良いんですがね
このスレッドは管理者によって ロック されていますので、返信並びに編集は出来ません!
タイトル
記事No
投稿日
投稿者
: Re: VB2010 Th521api cmmd = 119
: 318
: 2012/10/14(Sun) 07:23:48
: JA2BQX 太田
JJ8LSI 水本さん、ありがとうございます。 ビルド 構成マネージャー プラットフォームを Any CPU から x86 に変更したらエラーが出なくなり おかげさまでWin7 Home 64bit版のパソコンでVB2010でも idx_open , idx_search , idx_next , idx_close を使用して レコード番号を取得出来るようになりました。 SetDbsShare に関しては改めて試してみようと思います。 MNI TNX
このスレッドは管理者によって ロック されていますので、返信並びに編集は出来ません!
タイトル
記事No
投稿日
投稿者
: Re: VB2010 Th521api cmmd = 119
: 320
: 2012/10/14(Sun) 13:11:11
: JJ8LSI 水本
> idx_open , idx_search , idx_next , idx_close を使用して > レコード番号を取得出来るようになりました。 こちらに結果書いていたんですね お疲れ様でした
このスレッドは管理者によって ロック されていますので、返信並びに編集は出来ません!
タイトル
記事No
投稿日
投稿者
: Re: VB2010 Th521api cmmd = 119
: 316
: 2012/10/14(Sun) 00:21:42
: JJ8LSI 水本
> > 「間違ったフォーマットのプログラムを読み込もうとしました」のエラ-が出てしまいます。(VB6ではOKだが...) > ネットで調べてみると 64bitでコンパイルしたものから32bitのDLLをコールすると出るようですね 前記で 答えは出島OMが記述したとおりだと思いますけど 前記の質問でExpressと書いていたので、64bitコンパイルではなく32bitでコンパイルされているはずなんで不思議です その状態であれば、HAMLOG50.DLLはすべてコールできないと思います VB2010はインストールしたままの状態でのテストしました Expressには64bitでコンパイルするオプションは見つけれませんでした
このスレッドは管理者によって ロック されていますので、返信並びに編集は出来ません!
タイトル
記事No
投稿日
投稿者
: Re: VB2010 Th521api cmmd = 119
: 317
: 2012/10/14(Sun) 06:51:38
: JA2BQX 太田
JJ8LSI 水本さん、ありがとうございます。 NO 315で お返事をいただいた件はもう少し時間を下さい。 今日、これからテストしてみます。> VB2010はインストールしたままの状態でのテストしました > Expressには64bitでコンパイルするオプションは見つけれませんでし た 私の書き方が悪かったのでしょうね。パソコンがWin7の64Bit版であるというだけで VB2010 Express のコンパイルは Any CPU となっていまして 32 Bit でしょうね。
このスレッドは管理者によって ロック されていますので、返信並びに編集は出来ません!
タイトル
記事No
投稿日
投稿者
: Re: VB2010 Th521api cmmd = 119
: 319
: 2012/10/14(Sun) 12:48:53
: 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にしては如何でしょう
このスレッドは管理者によって ロック されていますので、返信並びに編集は出来ません!
タイトル
記事No
投稿日
投稿者
: Re: VB2010 Th521api cmmd = 119
: 313
: 2012/10/13(Sat) 20:24:34
: 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 > 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へ書き込む時はコード変換しています
このスレッドは管理者によって ロック されていますので、返信並びに編集は出来ません!