c# - 使用 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
推荐阅读
- python-3.x - 字符串格式的 Pandas 列表到 dict 列表
- python-3.x - wxPython 应用程序不退出系统托盘图标左键单击
- terraform - 将多个库附加到集群地形化 Databricks
- angular - 有没有更好的方法来验证复选框选择 Angular?
- google-bigquery - 获取 BQ 查询历史数据
- android - 取消所有安卓用户的活跃订阅
- python - 将小时和天添加到 python 日期时间
- php - 我可以使用 Laravel 在产品模型中使用餐厅和类别表的多对多关系吗?以及如何添加更新 Categories_Restaurants 表?
- tensorflow - ValueError:找不到匹配的函数来调用从 SavedModel 加载的调用,并且“CheckpointLoadStatus”对象没有属性“predict”
- three.js - 将 dxf 实体放在 mapbox 上并获取其类似的 geojson 的坐标 labs.mapbox.com/labs/dxf2geojson/dist/