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も見ています
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
ショートファイルネーム→ロングファイルネームへの変換
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【お題】絵本のタイトル
- ・【大喜利】世界最古のコンビニについて知ってる事を教えてください【投稿~10/10(木)】
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
コンボボックス表示文字列を取...
-
VBA:小数点以下の数字を取得で...
-
VB.NETで DataRow()を利用して...
-
ListView 項目の選択/選択解除...
-
VBAでActiveDirectoryのユーザ...
-
JavaScriptでWindowsログオンID...
-
JavaScriptにおいてコンピュー...
-
URIでのページの移動について
-
Spreadの選択行の取得について
-
VBSCriptで指定Webページの"123...
-
NTPサーバから時刻を取得する
-
JAVAでWindowsのアカウント名を...
-
タイマーオブジェクトを利用し...
-
C言語にてプログラミングを行っ...
-
エクセルVBAで範囲内での位置取...
-
GridViewのDropDownLisについて
-
時間を分に変換するプログラム
-
ディスプレイの表示可能な解像...
-
imgctl.dllを使って読み込んだ...
-
アクセスしてきたコンピュータ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB.NETで DataRow()を利用して...
-
VBAでActiveDirectoryのユーザ...
-
VBA:小数点以下の数字を取得で...
-
count(*)で取得した値をJAVAの...
-
ListView 項目の選択/選択解除...
-
利用者側のMACアドレスを取得し...
-
データ数をカウントしたいのですが
-
Spreadの選択行の取得について
-
iframe内で表示されてるサイト...
-
ListViewで複数選択された項目...
-
Flexgridで選択行の列の値を取...
-
VBA Shapesの座標からセル位置...
-
JavaScriptにおいてコンピュー...
-
like演算子内に変数って使えな...
-
コンボボックス表示文字列を取...
-
「Excel VBA」 Webクエリ マク...
-
VB .netにて現在時刻+1時間後...
-
JavaScriptでWindowsログオンID...
-
エクセルVBAで範囲内での位置取...
-
.NETで現在時刻を常に動作させ...
おすすめ情報