2010-07-15 2 views
3

Я пытаюсь P/вызывать библиотеку C из F # и столкнулся с особой проблемой. У меня есть модуль, содержащий все мои функции extern. В базовой библиотеке C есть две функции с одинаковым именем, но разные аргументы. Это, конечно, не допускается в модуле F #.Перегрузка функции P/Invoke

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.

ответ

6

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

+0

Спасибо. Я новичок во всей P/Invoke. – pblasucci

Смежные вопросы