我正在尝试从F#调用C库,并遇到了一个特殊的问题。我有一个包含所有extern
函数的模块。底层C库有两个具有相同名称但不同参数的函数。当然,这在F#模块中是不允许的。
module C =
open System.Runtime.InteropServices
[<DllImport("libc", CallingConvention = CallingConvention.Cdecl)>]
extern int setValue(nativeint source, int value)
[<DllImport("libc", CallingConvention = CallingConvention.Cdecl)>]
extern int setValue(nativeint source, string value)
// the previous function declaration cause the following compile-time error:
// Duplicate definition of value 'setValue'
有什么特殊方法可以解决这个问题吗?我不能改变C库。
答案 0 :(得分:6)
EntryPoint
属性应该有效(例如,使用序数),如果MSDN可以信任(未在F#中测试过)。命名导入的函数,例如setValueInt()
和setValueString()
。