puedo obtener este código a ejecutar en el entorno interactivo pero se bloquea cuando corro el código del depurador o desde el archivo .exeWin32 API GetShortPathName llamada error en Fa #
olvidó el error: se detectó FatalExecutionEngineError! El tiempo de ejecución ha encontrado un error fatal. La dirección del error estaba en 0x6c9781b0, en el hilo 0x1104. El código de error es 0xc0000005. Este error puede ser un error en el CLR o en las partes inseguras o no verificables del código de usuario. Las fuentes comunes de este error incluyen errores de clasificación de usuarios para COM-interop o PInvoke, que pueden dañar la pila.
Utilizando .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
interactivos env
$ (me alt + entrar en las dos funciones anteriores)
val GetShortPathName: String * * StringBuilder uint32 -> uint32 val MakeShortName: cadena -> cadena
$ MakeShortName @ "C: \ dev \ shortName \ shortName" ;; val it: string = "C: \ dev \ SHORTN ~ 1 \ SHORTN ~ 1"
Si usted ha resuelto su propia pregunta, por favor, puesto que como respuesta. – pad
No me deja durante 8 horas no suficiente rep =/ –
@DaveHanson hemos reducido los requisitos de representante para la auto-respuesta - por favor intente responder de nuevo –