使用未定义 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 对象。通过这种方式,您不必更改代码中对函数调用的所有引用,我认为这是您想避免的。

我找到了答案;我只是有一段时间没找对地方。

UnmanagedExports (Repacked)

一个非常有用的 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