|
分類:[.NET 全般]
AUTOCADのフィルター画面のコンボボックスのハンドル番号を取得し操作しているコードです。
VB5にて動作しているコードをVisual Studio Express2013(以下2013と称す)に移植しました。 実行部分での変更点は、2013で変数wsの前にByValを記述すると文法エラーが発生するので削除しました。 処理したいことは、コンボの項目を検索し見つかったら選択することです。
しかし、2013のCB_FINDSTRINGの処理行で下記のエラーメッセージが表示され処理は中断します。
VBはあまり詳しくなくネットからのコードを利用している状況なのでエラーの対処がちんぷんかんぷんです。
どなたか原因の分かる方お教え願えないでしょうか。 OSはwin7です。コードは抜粋のため分かりずらいかもしれませんが宜しくお願いします。 それと、スローとはどういったことなのでしょうか?
[VB5のコード] Public Declare Function SendMessage Lib "User32.dll" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Public Const CB_GETLBTEXT = &H148 'コンボボックスのリストボックスから文字列を取得する
ws = "** OR 開始" Cmbcnt = SendMessage(FILWndCMD, CB_GETCOUNT, 0, 0) 'CombBoxの項目数の取得 retValue = SendMessage(FILWndCMD, CB_FINDSTRING, -1, ByVal ws) '文字列検索ごインデックス取得 retValue = SendMessage(FILWndCMD, CB_SETCURSEL, retValue, 0) '項目の選択
[Visual Studio Express2013のコード] <System.Runtime.InteropServices.DllImport("user32.dll", CharSet:=System.Runtime.InteropServices.CharSet.Auto)> _ Public Function SendMessage( _ ByVal hWnd As Int32, _ ByVal Msg As Int32, _ ByVal wParam As Int32, _ ByRef lParam As Int32) As Long End Function
Public Const CB_GETLBTEXT = &H148 'コンボボックスのリストボックスから文字列を取得する
ws = "** OR 開始" Cmbcnt = SendMessage(FILWndCMD, CB_GETCOUNT, 0, 0) 'CombBoxの項目数の取得 これは確認のために実行する '次の命令にエラーが発生する retValue = SendMessage(FILWndCMD, CB_FINDSTRING, -1, ws) '文字列検索ごインデックス取得 retValue = SendMessage(FILWndCMD, CB_SETCURSEL, retValue, 0) '項目の選択
[実行時エラーメッセージ] 型'System.InvalidCastException'のハンドルされていない例外がMicrsoft.VisualBasic.dllで発生しました。 追加情報:String "** OR 開始"から型'Integer'への変換は無効です。 □この種類の例外がスローされると中断します
|