我已经阅读了几乎所有可以通过google找到的示例,并且无法完成最简单的任务从dll
创建nim
(Windows)
有人可以一步一步解释吗?
我正在使用nim
IDE-aporia
生成代码。
构建dll
是否需要使用命令行?我猜有个解决方法。
使用aporia IDE
\command line
,如何通过将下面的代码编译为dll
来获得与以下结果相同的结果:
extern "C" __declspec(dllexport) int __stdcall return_multiply(int num1, int num2)
{
return num1 * num2;
}
您可能知道的该代码可以从
c#
调用 最佳答案
简而言之,请执行以下步骤:
{.stdcall,exportc,dynlib.}
--app:lib
编译请记住,您始终可以检查生成的C代码以查看发生了什么。因此,让我们从一个包含以下内容的
test.nim
文件开始:proc return_multiply(num1, num2: int): int {.stdcall,exportc,dynlib.} =
num1 * num2
使用
nim c --app:lib -d:release test.nim
进行编译会生成DLL和以下代码(在nimcache文件夹中):N_LIB_EXPORT N_STDCALL(NI, return_multiply)(NI num1, NI num2) {
NI result;
result = 0;
result = (NI)(num1 * num2);
return result;
}
您可以在
nimbase.h
中查找这些宏。例如,对于Windows,N_LIB_EXPORT
定义如下:# ifdef __cplusplus
# define N_LIB_EXPORT extern "C" __declspec(dllexport)
# else
# define N_LIB_EXPORT extern __declspec(dllexport)
# endif
# define N_LIB_IMPORT extern __declspec(dllimport)
总体而言,您最终将获得给定的功能签名。
如果您不想使用命令行进行编译,则必须弄清楚哪些Aporia设置启用了
--app:lib
。关于c# - 如何创建一个Nim dll并从C#调用它,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33348222/