如何通过DLL公开erl_接口(Erlang&x27;s C库)?

如何通过DLL公开erl_接口(Erlang&x27;s C库)?,dll,erlang,export,pinvoke,Dll,Erlang,Export,Pinvoke,在过去的三天里,我一直在一个完全托管的Erlang接口上不间断地工作。在这一点上,我决定必须有一个更简单的方法。我有3000多行代码,它甚至还没有处于可编译状态。老实说,我在自己的代码中迷失了方向 所以,我记得Erlang有一个叫做erl_接口的C库。不幸的是,它只是一个.LIB文件,不能通过P/Invoke使用。我现在正在研究通过DLL公开静态库的方法 我想远离Visual C++,主要是因为我不是一个C/C++程序员,我发现它很难配置。TinyC是我在使用C语言处理任何东西时的首选编译器 我

在过去的三天里,我一直在一个完全托管的Erlang接口上不间断地工作。在这一点上,我决定必须有一个更简单的方法。我有3000多行代码,它甚至还没有处于可编译状态。老实说,我在自己的代码中迷失了方向

所以,我记得Erlang有一个叫做erl_接口的C库。不幸的是,它只是一个.LIB文件,不能通过P/Invoke使用。我现在正在研究通过DLL公开静态库的方法

我想远离Visual C++,主要是因为我不是一个C/C++程序员,我发现它很难配置。TinyC是我在使用C语言处理任何东西时的首选编译器

我该怎么办

我知道我可以将erl_接口链接到DLL,但如何公开这些函数?我必须把每一个都包装在我自己的出口中吗?这可能不会是一个问题,因为我可以编写一个脚本来从头文件生成代码。但是有没有一种更简单的方法我只是不知道


另外,请不要推荐OTP.NET。这是一个不错的库,但我希望使用它,因为这是一个大型项目,所以我希望将其保留在内部。

所以,您的问题是如何将静态库转换为动态库

最省力的解决方案是在“C”中编写一个薄垫片文件,该文件只委托给.lib中的文件,例如

ReturnType my_method1(args...) {
  return real_method1(args...);
}
...
并根据该库和静态库构建一个DLL


事后考虑--您可以采取另一种方法--将.lib构建到C++/CLI程序集中,并在其中进行转换/包装。毕竟,这就是C++/CLi的作用所在。

如果您需要使用C与Erlang接口的帮助,请查看“EPAPI”(Erlang端口API)。您当然可以浏览源代码,因为它是托管在谷歌代码上的。DEBIAN存储库也可用