Как мне открыть erl_interface (библиотеку C Эрланга) через DLL? - PullRequest
2 голосов
/ 24 августа 2009

Последние три дня я непрерывно работал над полностью управляемым интерфейсом к Erlang. На данный момент я решил, что просто должен быть более легкий путь. У меня чуть более 3000 строк, и он еще даже не находится в состоянии компиляции. Если честно, я теряюсь в своем собственном коде.

Итак, я вспомнил, что в Erlang есть библиотека C с именем erl_interface. К сожалению, он поставляется только в виде файла .LIB, который нельзя использовать через P / Invoke. Сейчас я изучаю способы предоставления статической библиотеки через DLL.

Я бы хотел держаться подальше от Visual C ++, в основном потому, что я не программист на C / C ++ по натуре, и мне очень трудно его настроить. TinyC - мой любимый компилятор при работе с чем-либо в C.

Как мне это сделать?

Я знаю, что могу связать erl_interface с DLL, но как я могу выставить функции? Должен ли я по сути обернуть каждый из них в свой собственный экспорт? Это, вероятно, не будет проблемой, так как я мог бы написать скрипт для генерации кода из заголовочного файла. Но есть ли более простой способ, о котором я просто не знаю?

Также, пожалуйста, не рекомендуйте OTP.NET. Это хорошая библиотека, но я хочу использовать это большой проект, поэтому я бы хотел оставить его на месте.

Ответы [ 2 ]

1 голос
/ 24 августа 2009

Итак, ваша проблема в том, чтобы превратить статическую библиотеку в динамическую.

Решением с наименьшими усилиями было бы написать файл с тонкой прокладкой в ​​'C', который просто делегирует файлы в .lib, например,

ReturnType my_method1(args...) {
  return real_method1(args...);
}
...

и создайте из него DLL и статическую библиотеку.

Запоздалая мысль - есть другой подход, который вы могли бы использовать - встроить .lib в сборку C ++ / CLI и выполнить переход / перенос в этом. В конце концов, это то, для чего нужен C ++ / CLi.

0 голосов
/ 10 сентября 2009

Если вам нужна помощь по взаимодействию с Erlang с C, взгляните на «EPAPI» (Erlang Port API) текст ссылки . Конечно, вы можете просматривать исходный код, поскольку он размещен в Google Code. Также доступен репозиторий DEBIAN.

...