Перегрузка функции P / Invoke - PullRequest
3 голосов
/ 15 июля 2010

Я пытаюсь вызвать P / Invoke из библиотеки C из F # и столкнулся со специфической проблемой У меня есть модуль, содержащий все мои 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 Ответ

6 голосов
/ 15 июля 2010

Атрибут EntryPoint должен работать (например, с порядковым номером), если MSDN можно доверять (не проверялось в F #).Назовите импортированные функции, например, setValueInt() и setValueString().

...