P / Invoke函数重载

时间:2010-07-15 14:14:43

标签: f# pinvoke

我正在尝试从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库。

1 个答案:

答案 0 :(得分:6)

EntryPoint属性应该有效(例如,使用序数),如果MSDN可以信任(未在F#中测试过)。命名导入的函数,例如setValueInt()setValueString()