GHC компилировать DLL для использования в VBA - PullRequest
0 голосов
/ 10 октября 2018

Это альтернативный подход к этому вопросу здесь: Экспорт библиотеки Haskell как DLL

Я работаю с GHC версии 8.6.1 [последняя] и следую документации для компиляции DLL из библиотеки haskell для последующего использования в VBA.

Мои файлы выглядят так:

Adder.hs:

{-# LANGUAGE ForeignFunctionInterface #-}
module Adder where

adder :: Int -> Int -> IO Int
adder x y = return (x+y)

foreign export ccall adder :: Int -> Int -> IO Int

StartEnd.c:

#include <Rts.h>

void HsStart() {
    int argc = 1;
    char* argv[] = {"ghcDll", NULL};
    char** args = argv;
    hs_init(&argc, &args);
}

void HsEnd() {
    hs_exit();
}

Я скопировал папку ghc-8.6.1\lib\include в место сборки и скопировал два файла в эту папку (потому что я не могу понять, как правильно передать параметр -I [PATH]).

При выполнении этих шагов компиляции я получаю:

ghc -c Adder.hs
    --> no error
ghc -c StartEnd.c
    --> no error
ghc -shared -no-hs-main -o Adder.dll Adder.o Adder_stub.h StartEnd.o
    --> no error

и файлы

Adder.dll
Adder.dll.a
Adder.hi
Adder.o
Adder_stub.h
startEnd.o

Я попытался использовать третью команду компиляции, как в документации ghc -shared -o Adder.dll Adder.o Adder_stub.h StartEnd.o, и с параметром -no-hs-main просто для уверенности.

Мой VBA-скрипт выглядит следующим образом:

Private Declare Function Adder Lib "PATH\TO\Adder.dll" Alias "adder" _
        (ByVal x As Long, ByVal y As Long) As Long

Private Declare Sub HsStart Lib "PATH\TO\Adder.dll" ()
Private Declare Sub HsEnd Lib "PATH\TO\Adder.dll" ()

Public Sub test()
    HsStart
    MsgBox "12 + 5 = " & Adder(12, 5)
    HsEnd
End Sub

Однако всякий раз, когда я пытаюсь запустить суб-тест, я получаю сообщение об ошибке:

Run-Time error '48'
File not found:
PATH\TO\Adder.dll

Можете ли вы сказатьмне, где я сделал ошибку и как я могу это исправить?

Если это поможет, вывод dumpbin /EXPORTS Adder.dll будет таким:

Microsoft (R) COFF/PE Dumper Version 14.00.24234.1
Copyright (C) Microsoft Corporation.  All rights reserved.


Dump of file Adder.dll

File Type: DLL

  Section contains the following exports for Adder.dll

    00000000 characteristics
    5BBD9533 time date stamp Wed Oct 10 07:59:15 2018
        0.00 version
           1 ordinal base
       29737 number of functions
       29737 number of names

    ordinal hint RVA      name

          1    0 004E0F18 ALLOC_BH_adm
          ...
          75   4A 00001681 HsEnd
          76   4B 00001640 HsStart
          ...
          472  1D7 00001540 adder
          ...

Мой путь:

C:\Users\scfa\AppData\Local\Programs\MiKTeX 2.9\miktex\bin\x64\;C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin;C:\Users\scfa\Documents\myProgramms\dev_msys2\mingw64\bin;C:\Users\scfa\Documents\myProgramms\dev_msys2\mingw32\bin;C:\Users\scfa\Documents\myProgramms\ghc-8.6.1\bin;C:\Users\scfa\Documents\myProgramms\ghc-8.6.1\mingw\bin
...