
VB6でTempフォルダをGetTempPath関数で取得するとショートファイル名でパスが返るので、
取得したショートファイル名をGetLongPathName関数でロングファイル名にしようと
しているのですが上手く出来ません。
Private Declare Function GetTempPath Lib "kernel32" Alias "GetTempPathA" _
(ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long
Private Declare Function GetLongPathName Lib "kernel32" Alias _
"GetLongPathNameA" (lpszShortPath As String, lpszLongPath As String, _
cchBuffer As Long) As Long
Dim nName As String
Dim Ret As Long
Dim Buf As String
nName = String$(260, vbNullChar)
Ret = GetTempPath(Len(nName), nName)
nName = Left$(nName, InStr(nName, vbNullChar) - 1)
Buf = String$(260, vbNullChar)
Ret = GetLongPathName(nName, Buf, 260)
Buf = Left$(Buf, InStr(Buf, vbNullChar) - 1)
Tempフォルダはショートファイル名(C:\DOCUME~1\Owner\LOCALS~1\Temp\)は
取得されますがGetLongPathName関数でロングファイル名が
返りません、戻り値は0が返ってしまいます。
コードが間違えているのか、元々取得出来ないのか分かりませんが
ご存知の方教えて下さいますようお願い致します。
尚、可能ならばFindFirstFile関数でロングファイル名を取得するのではでなくて
GetLongPathNameで取得したいと思っています。
No.1ベストアンサー
- 回答日時:
(回答)
Declare文の定義が間違っています。GetTempPathでは、
Byvalがついているのに、GetLongPathName ではついていないですよね。
この場合は、すべてByvalが必要です。
なお、GetLongPathName は、Win98以降で使用可能です。
Win95では、使用できないので注意してください。
(アドバイス)
1.Declare文の定義の仕方
WindowsAPIのDeclare文の定義方法は、MSDN(ヘルプ)
に記載されていますので、WindowsAPIを使うなら理解して
おいたほうがいいです。
Visual Basic ドキュメント
+ Visual Basic の使用方法
+ コンポーネント ツール ガイド
+ DLL および Windows API へのアクセス
+ DLL プロシージャの宣言
2.Netでサンプルをゲット
API名がわかっていれば、以下のキーワードで検索
してみればサンプルが見つかるのでは
「GetLongPathName VB」
キーワードに、最初はVB を入れて検索、見つからないときは
VBをはずすと検索する効率がいいと思います。
3.APIのエラーの調べ方
WindowsAPIでエラーの場合は、Err.LastDllErrorに
エラーコードが入っているので、Cのヘッダーファイルで
調べるか、WindowsAPIのFormatMessage関数で調べられます。
ご回答ありがとうございました。
関数の宣言部分を修正すると正常に動作しました
関数の宣言部分はネットから貼り付けただけで
確認していなかったです。
初歩的な確認ミス、すみませんでした。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
利用者側のMACアドレスを取得し...
-
VB.NETで DataRow()を利用して...
-
ListView 項目の選択/選択解除...
-
VBA:小数点以下の数字を取得で...
-
データ数をカウントしたいのですが
-
CGIで受信パラメータを解析...
-
count(*)で取得した値をJAVAの...
-
EnumWindowsのコールバック関数
-
JavaScriptにおいてコンピュー...
-
Excel VBA でログインしてい...
-
like演算子内に変数って使えな...
-
ドロップダウンリストの初期表...
-
バージョンナンバーの取得
-
VB .netにて現在時刻+1時間後...
-
C言語におけるコンピュータ名・...
-
getParameter と getAttribut...
-
JavaScriptでWindowsログオンID...
-
PHP8でWarning:Undefined varia...
-
VBAでActiveDirectoryのユーザ...
-
javaで週の最初の日(例:月曜日...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB.NETで DataRow()を利用して...
-
PHP8でWarning:Undefined varia...
-
count(*)で取得した値をJAVAの...
-
ListView 項目の選択/選択解除...
-
VBAでActiveDirectoryのユーザ...
-
VBA:小数点以下の数字を取得で...
-
JSP+Servletでのページングの常識
-
データ数をカウントしたいのですが
-
Flexgridで選択行の列の値を取...
-
利用者側のMACアドレスを取得し...
-
getParameter と getAttribut...
-
like演算子内に変数って使えな...
-
JavaScriptにおいてコンピュー...
-
郵便番号検索APIにてget Elemen...
-
DataGridView 複数選択で行番...
-
URIでのページの移動について
-
Spreadの選択行の取得について
-
指定のURLのタイトルを取得...
-
EXCELのリストボックスを選択し...
-
ListViewで複数選択された項目...
おすすめ情報