アプリ版:「スタンプのみでお礼する」機能のリリースについて

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で取得したいと思っています。

A 回答 (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関数で調べられます。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。
関数の宣言部分を修正すると正常に動作しました
関数の宣言部分はネットから貼り付けただけで
確認していなかったです。
初歩的な確認ミス、すみませんでした。

お礼日時:2006/09/24 10:01

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!