gpt4 book ai didi

winapi - f# 中的 Win32 api 调用错误 GetShortPathName

转载 作者:行者123 更新时间:2023-12-03 00:32:44 26 4
gpt4 key购买 nike

我可以让此代码在交互式环境中运行,但当我从调试器或 .exe 文件运行代码时,它会崩溃

忘记错误:检测到 FatalExecutionEngineError!运行时遇到 fatal error 。错误的地址位于线程 0x1104 上的 0x6c9781b0。错误代码为0xc0000005。此错误可能是 CLR 中的错​​误或用户代码的不安全或不可验证部分中的错误。此错误的常见来源包括 COM 互操作或 PInvoke 的用户编码错误,这可能会损坏堆栈。

使用.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

交互式环境

<小时/>

$(我alt+输入以上两个函数)

val GetShortPathName : 字符串 * StringBuilder * uint32 -> uint32val MakeShortName : 字符串 -> 字符串

$ MakeShortName @"C:\dev\shortName\shortName";;val it : string = "C:\dev\SHORTN~1\SHORTN~1"

最佳答案

已修复。

我只是烂@ win 32

删除编码(marshal)

查看解决方案:

open System.IO
open System.Runtime.InteropServices
open System.Text

[<DllImport("kernel32.dll",CharSet = CharSet.Auto, SetLastError=true)>]
extern int GetShortPathName(
string longpath,
StringBuilder shortpath,
int item)

let MakeShortName(longPath : string) =
let sb = StringBuilder()
let currPath = longPath
let item = 1024

// 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

关于winapi - f# 中的 Win32 api 调用错误 GetShortPathName,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10743377/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com