小编kin*_*jah的帖子

可能的F#交互式PInvoke错误

在试图向同事证明可以使用F#的C++类时,我提出了以下概念证明.第一个片段是他为挑战提供的代码,下面的代码片段是我在F#中的实现.


namespace testapp {
    struct trivial_foo {
        int bar;
        __declspec(dllexport) void set(int n) { bar = n; }
        __declspec(dllexport) int get() { return bar; }
    }
}
Run Code Online (Sandbox Code Playgroud)
open System.Runtime.InteropServices

type TrivialFoo =
    struct
        val bar: int
        new(_bar: int) = { bar = _bar }
    end

[<DllImport("Win32Project2.dll", EntryPoint="?get@trivial_foo@testapp@@QAEHXZ", CallingConvention = CallingConvention.ThisCall)>]
extern int trivial_foo_get(TrivialFoo& trivial_foo)

[<DllImport("Win32Project2.dll", EntryPoint="?set@trivial_foo@testapp@@QAEXH@Z", CallingConvention = CallingConvention.ThisCall)>]
extern void trivial_foo_set(TrivialFoo& trivial_foo, int bar)

type TrivialFoo with
    member this.Get() = trivial_foo_get(&this)
    member this.Set(bar) = trivial_foo_set(&this, bar)
Run Code Online (Sandbox Code Playgroud)

在Visual Studio中调试或作为独立程序运行时,这可以预测:TrivialFoo.Get …

pinvoke f#

10
推荐指数
1
解决办法
254
查看次数

标签 统计

f# ×1

pinvoke ×1