GHC FFI в Windows: неопределенная ссылка на `CreateInstance @ 4″

#haskell

#хаскелл

Вопрос:

У меня есть супер базовый тестовый модуль, чтобы попытаться использовать Windows DLL:

 {-# LANGUAGE ForeignFunctionInterface #-}

module Fface where

import Foreign
import Foreign.C.Types

newtype FFACE = FFACE (Ptr FFACE)

foreign import stdcall unsafe "FFACE4.h CreateInstance"
    c_CreateInstance :: CUInt -> IO (Ptr FFACE)
  

При попытке скомпилировать его в простую тестовую программу я получаю следующую ошибку:

 Linking Main.exe ...
.Fface.o:fake:(.text 0x18): undefined reference to `CreateInstance@4'
collect2.exe: error: ld returned 1 exit status
  

Используя gendef для сброса списка экспорта из библиотеки DLL, я вижу, что функция фактически экспортируется как «CreateInstance @1925», но почти все остальные функции экспортируются только как их простое имя без каких-либо элементов @number. Для чего нужен @1925 и как я могу заставить GHC использовать его вместо @4?

Комментарии:

1. Это не отвечает на ваш вопрос, но один из способов устранения ошибок нечетного компоновщика — использовать динамическую загрузку. См. раздел System.Win32.DHCP библиотеки моего Win32-dhcp-сервера.Win32.DHCP. Внутренний модуль для примера.