使用未定义 class 的 C# Interop 库调用函数
Calling a function using C# Interop library without class defined
我有一个 VB6 应用程序,我需要能够将引用从一个 dll 切换到另一个(我正在编写的)
它需要能够在不添加 class
的情况下调用 someFunction()
比如
在 vb6 中:
Dim test As SomeObject
Set SomeObject = someFunction("test")
这两个 dll 需要在代码方面可以互换。我们只希望在生成的程序中更改一个引用来做两件不同的事情
似乎C#不允许静态函数的互操作(因为COM限制);尽管我仍然需要一个暴露给 vb6 的函数来满足这个要求
如果您有权访问代码,为什么不添加新模块并添加该功能。在函数体中像往常一样调用 COM 对象。通过这种方式,您不必更改代码中对函数调用的所有引用,我认为这是您想避免的。
我找到了答案;我只是有一段时间没找对地方。
一个非常有用的 nuget 包,它导出具有属性“DllExport”的函数
例如:
在 C# 中
[DllExport]
public static void HelloWorld() { return "Hi!" }
可以像这样从VB6应用程序调用
Private Declare Function HelloWorld Lib "MyCSharpDll.dll" () As String
稍后在代码中简单地调用它(这是如果你想输出像 MsgBox persay)
MsgBox HelloWorld()
这只会 return “嗨!”在消息框中
是不是很酷?
您可以从开发者控制台使用此命令查看 .dll 的导出
dumpbin /EXPORTS MyCSharpDll.dll
我有一个 VB6 应用程序,我需要能够将引用从一个 dll 切换到另一个(我正在编写的)
它需要能够在不添加 class
的情况下调用 someFunction()比如
在 vb6 中:
Dim test As SomeObject
Set SomeObject = someFunction("test")
这两个 dll 需要在代码方面可以互换。我们只希望在生成的程序中更改一个引用来做两件不同的事情
似乎C#不允许静态函数的互操作(因为COM限制);尽管我仍然需要一个暴露给 vb6 的函数来满足这个要求
如果您有权访问代码,为什么不添加新模块并添加该功能。在函数体中像往常一样调用 COM 对象。通过这种方式,您不必更改代码中对函数调用的所有引用,我认为这是您想避免的。
我找到了答案;我只是有一段时间没找对地方。
一个非常有用的 nuget 包,它导出具有属性“DllExport”的函数
例如:
在 C# 中
[DllExport]
public static void HelloWorld() { return "Hi!" }
可以像这样从VB6应用程序调用
Private Declare Function HelloWorld Lib "MyCSharpDll.dll" () As String
稍后在代码中简单地调用它(这是如果你想输出像 MsgBox persay)
MsgBox HelloWorld()
这只会 return “嗨!”在消息框中
是不是很酷?
您可以从开发者控制台使用此命令查看 .dll 的导出
dumpbin /EXPORTS MyCSharpDll.dll