问题描述
我有一个VB6应用程序,我需要能够将引用从一个dll切换到另一个(我正在编写)
它必须能够在不添加类的情况下调用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一样的话)
MsgBox HelloWorld()
哪个会简单地返回“嗨!”在消息框中
那不是很酷吗?
您可以使用开发者控制台中的此命令查看.dll中的导出内容
dumpbin /EXPORTS MyCSharpDll.dll