首页 > 其他分享 >nim 创建 dll(nim学习系列)

nim 创建 dll(nim学习系列)

时间:2023-05-09 22:14:18浏览次数:56  
标签:nim -- 创建 dll https test proc

nim 创建 dll

编译命令

nim c --app:lib --nomain:on test.nim

“--app:lib”表示生成动态链接库(dll)。
“--nomain:on”表示不生成 dllmain 函数。

源代码

test() 是我们自定义的导出函数。

import winim/lean

proc NimMain() {.cdecl, importc.}

proc test(): void {.cdecl, exportc, dynlib.} = 
    MessageBox(0, "test", "Nim is Powerful", 0)

proc DllMain(hinstDLL: HINSTANCE, fdwReason: DWORD, lpvReserved: LPVOID) : BOOL {.stdcall, exportc, dynlib.} =
  NimMain()
  
  case fdwReason:
    of DLL_PROCESS_ATTACH:        
        MessageBox(0, "Hello, world !", "Nim is Powerful", 0)      
    of DLL_PROCESS_DETACH:
      discard
    of DLL_THREAD_ATTACH:
      discard
    of DLL_THREAD_DETACH:
      discard
    else:
      discard      
      
  return true

使用 rundll32 运行,会依次弹出两个窗口。

rundll32 test.dll,test

如下图可以看到有3个导出函数。

自动生成 dllmian

如果不需要自己实现 dllmain 则可以这样写

import winim/lean

proc test(): void {.cdecl, exportc, dynlib.} = 
    MessageBox(0, "test", "Nim is Powerful", 0)

编译命令

nim c --app:lib --nomain:off test.nim

引用

https://nim-lang.org/docs/manual.html#foreign-function-interface-dynlib-pragma-for-export
https://github.com/byt3bl33d3r/OffensiveNim#creating-windows-dlls-with-an-exported-dllmain
https://forum.nim-lang.org/t/1973
https://nim-lang.org/docs/nimc.html
https://peterme.net/dynamic-libraries-in-nim.html
https://learn.microsoft.com/en-us/windows/win32/dlls/dllmain

From: https://www.cnblogs.com/StudyCat/p/17386443.html

标签:nim,--,创建,dll,https,test,proc
From: https://www.cnblogs.com/StudyCat/p/17386443.html

相关文章

  • 大模型训练数据统计+探索如何创建自己的数据集
    羊驼数据集52k,基于llama模型训练此数据集是是使用llama模型自己生成数据,然后对这些生成进行过滤,以删除低质量或类似的生成,并将生成的数据添加回任务池。这个过程可以重复多次,从而产生大量的教学数据,这些数据可以用来微调语言模型,以更有效地遵循指令。此创建数据集的方法其实和......
  • KingbaseES V8R6 集群运维案例--备库timeline not contain minimum recovery point故
    ​案例现象:KingbaseESV8R6集群备库启动后,加入集群失败,sys_log日志信息提示,如下图所示:适用版本:kingbaseESV8R6一、问题分析在timeline对应的history文件中会记录每次timeline切换时所对应的lsn,如下图所示,在sys_wal目录下:.......-rw-------1kingbasekingbase1.2KFe......
  • windows用户改名与创建管理员
    改名示例,结果失败:wmicuseraccountwherename='Administrator'rename'Admin'创建管理员账户#查看用户netuser#添加用户netusernamepassword/add#将用户设置为管理员netlocalgroupadministratorstian/add ......
  • idea进入和创建web项目
    我真的服了,以往一直Add添加项目,但是今天突然失败了我搞了好久都没搞出来,服了之后去问了我nb的舍友,他帮我搞好了!!!#记录,如何创建web项目第一步,创建项目在pom.xml文件里面使用web打包,并且转一下第二步,打开这个界面双击红色文字,点击ok第三步,点击上个图片上面的AddAppli......
  • 《花雕学AI》ChatMind:与AI对话,轻松梳理思路并创建思维导图
    引言:思维导图是一种有效的思维工具,可以帮助用户整理和表达自己的思路,提高学习和工作的效率和质量。然而,传统的思维导图工具往往需要用户花费大量的时间和精力,学习和操作复杂的界面和功能,而且很难根据用户的个性化需求,提供合适的样式和模板。有没有一种更简单、更智能、更有趣的思......
  • Springboot创建多module项目--转载
    1)createnewproject(或File-->new-->project)2)选中SpringInitializr,点击Nextimage.png3)填写必要信息,点击Nextimage.png4)依赖页不用勾选,点击Nextimage.png5)选择项目存储目录,点击Finishimage.png6)在pom.xml中加入packaging......
  • Django REST framework创建api
    我们将创建一个简单的允许管理员用户查看和编辑系统中的用户和组的API。项目设置创建一个名为 tutorial 的新django项目,然后启动一个名为 quickstart 的新app。#创建项目目录mkdirtutorialcdtutorial#创建一个virtualenv来隔离我们本地的包依赖关系virtualenvenv......
  • OceanBase创建租户
    使用root用户连接sysy租户使用root用户连接sys租户[admin]#mysql-h192.168.1.71-P2881-Doceanbase-uroot@sys-pOceanbase2881-A创建单元规格查看已创有的资源单元规格obclient[oceanbase]>select*from__all_unit_config;+----------------------------+------......
  • FreeCodeCamp-通过创建一架钢琴来学习响应式网页设计
    index.html<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"/><title>Piano</title><metaname="viewport"content="width=device-width,initial-scale=1.0&q......
  • 如何创建可引导的 ESXi USB 安装介质 (macOS, Linux, Windows)
    如何制作ESXiUSB启动盘请访问原文链接:https://sysin.org/blog/create-bootable-esxi-usb-installer/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org以下USB存储设备可以是U盘/SD卡,当然USBSSD更佳。macOSmacOS使用终端自带命令即可完成操作。查看US......