に私はインタラクティブな環境で実行するには、このコードを取得することができますが、私はのWin32 API呼び出しのエラーGetShortPathName F#
デバッガからのファイルまたは.exeファイルからのコードがエラーを忘れた実行したときに、それがクラッシュ: FatalExecutionEngineErrorが検出されました! 実行時に致命的なエラーが発生しました。エラーのアドレスは、スレッド0x1104の0x6c9781b0にありました。エラーコードは0xc0000005です。このエラーは、CLRまたはユーザーコードの安全でない部分または検証不能な部分のバグである可能性があります。このバグの一般的な原因には、COM-interopまたはPInvokeのユーザーマーシャリングエラーがあり、スタックが破損する可能性があります。 - > UINT32文字列*のStringBuilder * UINT32:.NET 4.5
open System.IO
open System.Runtime.InteropServices
open System.Text
[<DllImport("kernel32.dll",CharSet = CharSet.Auto, SetLastError=true)>]
extern uint32 GetShortPathName(
[<MarshalAs(UnmanagedType.LPWStr)>] string longpath,
[<MarshalAs(UnmanagedType.LPWStr)>] StringBuilder shortpath,
[<MarshalAs(UnmanagedType.U4)>] uint32 item)
let MakeShortName(longPath : string) =
let sb = StringBuilder()
let currPath = longPath
let item = 1024u
// let blah = ""
//win32 assigns shortPath
let blah32 = GetShortPathName(currPath, sb, item)
sb.ToString()
[<EntryPoint>]
let main argv =
let path = @"C:\dev\shortName\shortName"
let shorty = MakeShortName path
printfn "%s" shorty
let x = System.Console.ReadKey()
0
インタラクティブENV
$(私ALT +は、上記の二つの機能を入力)
ヴァルGetShortPathNameを使用して
val MakeShortName:文字列 - >文字列
$ MakeShortName @ "C:\ dev \ shortName \ shortName" ;; val:文字列= "C:\ dev \ SHORTN〜1 \ SHORTN〜1"
を、その答えとして、それを投稿してください。 – pad
それは8時間私を十分にすることはできません=/ –
@DaveHanson私たちは自己応答のための担当者要件を下げました - 再度お試しください –