Back
新着表示
タイトル
記事No
投稿日
投稿者
: Re: idx_search
: 659
: 2015/02/08(Sun) 07:52:07
: JA2BQX 太田
おはようございます。 試しているのですが , DATE と DATE+TIME のレコード番号が取れません。 CALLS と CODE は上手く取れるのですが、先に提示したコードでの search_date には search_date = "01/02/03" 形式で良いでしょうか?
このスレッドは管理者によって ロック されていますので、返信並びに編集は出来ません!
タイトル
記事No
投稿日
投稿者
: Re: idx_search
: 658
: 2015/02/07(Sat) 16:32:52
: JA2BQX 太田
浜田さん、こんにちは。 早速の返信ありがとうございました。> ゼロで大丈夫なはずですよ。 > ゼロを指定すれば、内部で Length(search_date) でサーチします。 分かりました。自宅に戻ったらテストして見ます。 今は山シャックでK1Nの追っかけ中です。 JAからは中央アメリカ、カリブは遠い....。
このスレッドは管理者によって ロック されていますので、返信並びに編集は出来ません!
タイトル
記事No
投稿日
投稿者
: Re: idx_search
: 657
: 2015/02/07(Sat) 16:03:36
: JG1MOU浜田
> idx_search 関数の使い方ですが下記の ? には幾つを指定すれば良いでしょうか? > rec_no_1st = idx_search(THindx, search_date, ?) ゼロで大丈夫なはずですよ。 ゼロを指定すれば、内部で Length(search_date) でサーチします。
このスレッドは管理者によって ロック されていますので、返信並びに編集は出来ません!
タイトル
記事No
投稿日
投稿者
: idx_search
: 656
: 2015/02/07(Sat) 13:53:27
: JA2BQX 太田
こんにちは。 何時もお世話になります。 VB2010にて日付けを指定してレコード番号を取得しようとしています。 ソースの一部抜粋が下記です。 Declare Function MakeIndex Lib "Hamlog50.dll" (ByVal s As String, ByVal k As String, ByVal i As String) As int32 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 MakeIndex(hamlogpath, "DATE", "C:\Hamlog\Date.Ndx") Ret = idx_open("C:\Hamlog\Date.Ndx", THindx) search_date = "15/02/03" rec_no_1st = idx_search(THindx, search_date, 8) Call idx_close(THindx) idx_search 関数の使い方ですが下記の ? には幾つを指定すれば良いでしょうか? rec_no_1st = idx_search(THindx, search_date, ?) Th524ap の Hamlog50.txt にて下記の様に記載されている len です。 search_date = "15/02/03" なら 8 で良いと思いますが、今は山シャックなのでテスト出来ない...。 コールサインの時には ゼロ で上手くサーチ出来ましたが。 MakeIndex(hamlogpath, "TIME", "C:\Hamlog\Time.Ndx") の時には "12:34U" なら 6 で良いでしょうか。 引 数:idx dBASE互換インデックスファイルの構造体 key 検索するキー。THW_seek()と同様。 len 検索するキーの長さを指定する。コールサインの文字列が全部一致するキーを検索する場合は6。 プリフィックスだけ一致の場合は3。ゼロの場合は、key が通常のヌルターミネート文字列であるとして検索する
このスレッドは管理者によって ロック されていますので、返信並びに編集は出来ません!
タイトル
記事No
投稿日
投稿者
: Re: データ新規登録イベント
: 655
: 2015/01/05(Mon) 23:47:29
: JP7CZE 川辺
JA7UDE 大庭さん,> 出島OM、太田OM、 > > アイディアをありがとうございました。定期的なポーリングが必要ということと理解いたしました。 > > 73 > 大庭 > JA7UDE もう解決されたかもしれませんが, 私も同様にHamlog のデータが更新されたかどうかのチェックをおこない,更新されていたら交信データを取り込んで処理をするプログラムを作りました. もともと,入力画面のQTHのデータが変化するのを検知して,変化したら取り込んで処理をさせる目的で,500msごとにコマンドの112でQTHのデータを取り込んでいる処理をしていました. この入力画面で,QTHのデータが空白になったタイミングというのは,入力データがSAVEされたかキャンセルされたかのいずれかです. そこで,QTHのデータが,有意な文字列から空白文字列に変化した時点で,初めて交信データの総数を読みに行くようにしました. 直接毎回交信データの総数を読みに行くよりは,Hamlogおよび自作ソフトの負担が軽くなるのではないかということです. 参考にはならないかもしれませんが. de JP7CZE
このスレッドは管理者によって ロック されていますので、返信並びに編集は出来ません!
タイトル
記事No
投稿日
投稿者
: Re: WM_COPYDATAについて
: 654
: 2014/12/19(Fri) 00:27:43
: JP7CZE 川辺
> 今回の川辺さんのソースでは lpData As String * 3927 となっていた > lpData As String に変えたらTHWから取れましたので。 私が定義していたのが, Type COPYDATASTRUCT dwData As Long cbData As Long lpData As String * 3927 ' void * のつもり End Type です(コメントは悪銭苦闘の残骸ですね...Hamadaさんのオリジナルの消し忘れ). あちこちのページを参考に,色々弄くってみて, 期待する結果が出るように,力ずくで弄くり倒した結果, なんとかちゃんと結果は得られたか,と思っていたのですが, Hamadaさんからダメだしをくらいまして(^^; Dim cds As COPYDATASTRUCT Call CopyMemory(cds, ByVal lParam, Len(cds)) で取得していたのですが,問題は cds.lpDataの中身. THWからはcbDataの長さの文字列が帰ってきて最後はOx00が入ってくることはわかっていたのですが,うまく取れないので,戻り値をダンプしてみたら,14バイトの最後が0で終わるデータが本来のlpDataの前にくっついていることがわかりました. その後は,VBの場合,文字列がunicode で2byteですが,(cbData-1)+1 で切り出してもなぜかうまく取り出せませんでした??? なので強引に先頭の14byteを除去して,0x00までを取得するようにしたわけです. 変数等の内部構造も何も知らずに,Web上の先人たちの情報と結果だけを頼りに弄くっているだけなので.... それでも,みなさんのおかげで,正しくWM_COPYDATA の結果が取れるようになりました. ほんとにありがとうございました.
このスレッドは管理者によって ロック されていますので、返信並びに編集は出来ません!
タイトル
記事No
投稿日
投稿者
: Re: WM_COPYDATAについて
: 653
: 2014/12/18(Thu) 22:14:05
: JA2BQX 太田
浜田さん、こんばんは。 私はWindowProcは理解して使っているでは無くて、他からのコピーで 動かしている状態。> VBの場合の lpData は、Stringでいいのでしょうか。 > Longがいいのでしょうか。 私のVB6のソースでは Long を使っています。 今回の川辺さんのソースでは lpData As String * 3927 となっていた lpData As String に変えたらTHWから取れましたので。 VB2010では lpData As String で使っています。 .....動作などを理解しての使用では無いので動けば良い...と言うレベルです、Hi。
このスレッドは管理者によって ロック されていますので、返信並びに編集は出来ません!
タイトル
記事No
投稿日
投稿者
: Re: WM_COPYDATAについて
: 652
: 2014/12/18(Thu) 21:51:03
: JG1MOU浜田
VBの場合の lpData は、Stringでいいのでしょうか。
Longがいいのでしょうか。
私が書いたドキュメントでは、
lpData As String ' void * のつもり
としましたが、本家では Long になってました。
http://support.microsoft.com/kb/176058/ja ポインタが素直に使えない言語体系だと考えると、Longでアドレスを
直接渡した方がいいのかな、と考えました。
BASICはよくわからない・・・
このスレッドは管理者によって ロック されていますので、返信並びに編集は出来ません!
タイトル
記事No
投稿日
投稿者
: Re: WM_COPYDATAについて
: 651
: 2014/12/18(Thu) 21:12:09
: JA2BQX 太田
こんばんは。 ソースを送っていただいたので試して見ました。 結論としては修正出来たようです。> Type COPYDATASTRUCT > dwData As Long > cbData As Long > lpData As String * 3927 ' void * のつもり > End Type lpData As String で良く、以下が余分だったかと。 [ * 3927 ' void * のつもり ] <== この部分は余分。 下記で切り出しをしていたのですが lpData As String にすれば cds.lpData に THW からの情報が普通に取れていました。 For i = 1 To 3927 a = Mid(cds.lpData, i, 1) ...以下省略
このスレッドは管理者によって ロック されていますので、返信並びに編集は出来ません!
タイトル
記事No
投稿日
投稿者
: Re: WM_COPYDATAについて
: 650
: 2014/12/18(Thu) 20:55:52
: JP7CZE 川辺
JA2BQX 太田さん, さっそくのメールの返答ありがとうございました. プログラムを拝見させて頂きまして,私の理解不足の点がわかりました. COPYDATASTRUCT構造体の定義自体が違ってたのですね. 単なる文字列でいいのかと思っていましたが, アドレスでの受け渡しなのですね. Type COPYDATASTRUCT_02 dwData As Long cbData As Long lpData As Long End Type CopyMemory bytReceiveDataBuffer(0), ByVal .lpData, .cbData で,受け取りをbyte配列にして,bytReceiveDataBuffer(0)で受け取りアドレスの先頭を指定できるというのは, 知りませんでした. また,Byte配列をVisualBasicの文字列の内部形式であるunicodeに変換する StrConv関数 も知りませんでした. ということで,ありがとうございました.
このスレッドは管理者によって ロック されていますので、返信並びに編集は出来ません!