У меня есть модуль, который содержит интерфейс к собственной DLL; это выглядит так:
// nvtt.dll binding module
module private NvTextureTools =
type NvttInputOptions = IntPtr
[<DllImport("nvtt", CallingConvention = CallingConvention.Cdecl)>]
extern NvttInputOptions nvttCreateInputOptions()
[<DllImport("nvtt", CallingConvention = CallingConvention.Cdecl)>]
extern void nvttDestroyInputOptions(NvttInputOptions)
[<DllImport("nvtt", CallingConvention = CallingConvention.Cdecl)>]
extern void nvttSetInputOptionsAlphaMode(NvttInputOptions, AlphaMode alphaMode)
[<DllImport("nvtt", CallingConvention = CallingConvention.Cdecl)>]
extern void nvttSetInputOptionsGamma(NvttInputOptions, float inputGamma, float outputGamma)
[<DllImport("nvtt", CallingConvention = CallingConvention.Cdecl)>]
extern void nvttSetInputOptionsWrapMode(NvttInputOptions, WrapMode mode)
(есть в 5 раз больше функций, но это должно дать общее представление).
Есть ли способ указать параметры DllImport только один раз? Насколько я понимаю, я не могу наследовать от DllImport (он запечатан, и в любом случае я не думаю, что он будет работать, если бы не было), и я не могу использовать отражение, чтобы добавить необходимые атрибуты, потому что они мне нужны время компиляции.
Я мог бы создать новый класс с методами P / Invoke, используя отражение, но это сделает их громоздкими.
Есть мысли?