掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
VB6で保護モードAPIを動かすには? (ID:103079)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
壁が多くて難儀しています。 >(4) 3 が指す Unicode文字列の長さを、lstrlenW API で調べる。 これはクリアしました。 ダイアログで選択するフォルダを変えると、文字列長が変わります。 >(6) 3 が指す Unicod 文字列を、lstrcpyW API か RtlMoveMemory API で 5 に書き込む。 >(7) 6 のUnicode バイナリを String 変数に代入する。NULL 終端が含まれていればそれも取り除く。 ここが上手くいっていないようです。 ちょっと時間がかかりそうです。 '保護モードAPI Private Declare Function IESaveFile Lib "Ieframe.dll" (ByVal hstate As Long, ByVal sourceFile As Long) As Long Private Declare Function IEShowSaveFileDialog Lib "Ieframe.dll" _ (ByVal hwnd As Long, _ ByVal initialFileName As Long, _ ByVal initialDir As Long, _ ByVal fileFilter As Long, _ ByVal defExtention As Long, _ ByVal filterIndex As Long, _ ByVal flag As Long, _ ByRef filePath As Long, _ ByRef handle As Long) As Long Private Declare Function lstrlenW _ Lib "kernel32" _ (ByVal lpString As Long) _ As Long 'メモリブロックを移動する関数の宣言 Private Declare Sub RtlMoveMemory Lib "kernel32" _ (Destination As Any, _ Source As Any, _ ByVal length As Long) ' CoTaskMemFree 関数 Private Declare Sub CoTaskMemFree Lib "OLE32.DLL" (ByVal pv As Long) Dim handle As Long Dim outDir As String Dim rv As Long Dim hwnd As Long Dim lpszExt As String Dim lpszDefExt As String lpszExt = "All Files|*.*|" lpszDefExt = "" hwnd = GetForegroundWindow() rv = S_FALSE Dim outDirPtr As Long rv = IEShowSaveFileDialog( _ hwnd, _ StrPtr("testdata.txt"), _ StrPtr(""), _ StrPtr(lpszExt), _ StrPtr(lpszDefExt), _ 1, _ OFN_OVERWRITEPROMPT, _ outDirPtr, _ handle) MsgBox outDirPtr & vbCrLf & "outDirPtr" Dim length As Long Dim bytedata() As Byte Dim outStr As String length = lstrlenW(outDirPtr) MsgBox "文字列長:" & length ReDim bytedata(0 To length * 2) Call RtlMoveMemory(bytedata(0), outDirPtr, lngLengthChar * 2) outStr = StrConv(bytedata, vbFromUnicode) MsgBox outStr outStr = StrConv(bytedata, vbUnicode) MsgBox outStr outStr = bytedata MsgBox outStr Call CoTaskMemFree(outDirPtr)
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.