我正在使用一个extern
DLL,它有一堆返回ReturnCode
枚举的例程,所以我编写了以下帮助函数来记录所有错误:
let mutable LastError = ReturnCode.OK
let mutable LastReturnCode = ReturnCode.OK
let mutable TotalErrors = 0
let Run (call: unit -> ReturnCode) =
LastReturnCode <- call()
if LastReturnCode <> ReturnCode.OK then
LastError <- LastReturnCode
TotalErrors <- TotalErrors + 1
很好,除了一些 DLL 的函数有out
参数。所以现在当我做类似的事情时
let CreateEvfImageRef (streamHandle: int) =
let mutable evfImageHandle = 0
Run (fun () -> Extern.EdsCreateEvfImageRef (streamHandle, &evfImageHandle))
evfImageHandle
编译器给了我一个“可变变量不能被闭包捕获”错误。Run
除了到处内联之外,我还能做些什么吗?这在 C# 中运行良好。
(下面的外部声明示例)
[<DllImport(EDSDKPath)>]
extern ReturnCode EdsCreateEvfImageRef(int inStreamHandle, [<Out>] int& outEvfImageHandle);