posso ottenere il codice per l'esecuzione in ambiente interattivo ma si blocca quando si esegue il codice dal debugger o dal file exeAPI Win32 chiamata Errore GetShortPathName in F #
dimenticato l'errore: è stato rilevato FatalExecutionEngineError! Il runtime ha riscontrato un errore irreversibile. L'indirizzo dell'errore era a 0x6c9781b0, sul thread 0x1104. Il codice di errore è 0xc0000005. Questo errore potrebbe essere un bug nel CLR o nelle parti non sicure o non verificabili del codice utente. Le fonti comuni di questo bug includono errori di marshalling dell'utente per COM-Interop o PInvoke, che possono danneggiare lo stack.
Utilizzando .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
Interactive env
$ (mi alt + inserendo queste due funzioni)
val GetShortPathName: stringa * StringBuilder * Uint32 -> Uint32 val MakeShortName: stringa -> stringa
$ MakeShortName @ "C: \ dev \ shortName \ shortName" ;; val it: string = "C: \ dev \ SHORTN ~ 1 \ SHORTN ~ 1"
Se hai risolto il tuo problema, si prega di inviare come risposta. – pad
Non mi lascerà per 8 ore non sufficiente rep =/ –
@DaveHanson abbiamo abbassato i requisiti di risposta per rispondere autonomamente - prova a rispondere di nuovo –