如何解决使用 Nim 生成用于 C#/VB6 的 DLL
经过数小时的尝试解决这个问题后,我想知道是否有办法做到这一点。
我需要能够导出从 VB6 调用的函数(是的,你没看错,不是 VB.NET),但我不知所措。我已经生成了一个应该可以工作的 DLL;它至少在从 C 调用时起作用,但没有进一步。
也许一些 Nim 兽医可以引导我朝着正确的方向前进。我会非常感激。
解决方法
我绝对不是 Nim 兽医,但这里有一些有效的方法。
从 VB6 应用程序调用 Nim proc。
Nim DLL(使用 nim c --cpu:i386 --app:lib --nomain 编译):
{.passc:"-m32"}
{.passl:"-m32"}
import winim,os
proc TestFunc(a: cint):cint {.exportc,stdcall,dynlib.} =
echo "function called!"
a + 5
when defined(vcc):
{.emit: "N_LIB_EXPORT N_CDECL(void,NimMain)(void);".}
else:
proc NimMain() {.cdecl,importc.}
proc DllMain(hModule: HINSTANCE,reasonForCall: DWORD,lpReserved: LPVOID): WINBOOL {.exportc,dynlib,stdcall.} =
case reasonForCall:
of DLL_PROCESS_ATTACH:
when defined(vcc):
{.emit: "NimMain();".}
else:
NimMain()
AllocConsole()
discard stdout.reopen("CONOUT$",fmWrite)
discard execShellCmd("chcp 65001")
echo "Hello from Nim Code!"
else:
discard
return TRUE
VB6:
Private Declare Function TestFunc Lib "nim.dll" Alias "TestFunc@4" (ByVal a As Long) As Long
Private Sub Form_Load()
Caption = CStr(TestFunc(5))
End Sub
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。