【发布时间】:2020-08-14 00:04:54
【问题描述】:
我有一个 VB6 应用程序,我需要能够将引用从一个 dll 切换到另一个(我正在编写)
它需要能够在不添加类的情况下调用 someFunction()
如
在 vb6 中:
Dim test As SomeObject
Set SomeObject = someFunction("test")
这两个 dll 需要在代码方面是可互换的。我们只希望在生成的程序中引用一个更改来做两件不同的事情
似乎 C# 不允许静态函数的互操作(由于 COM 限制);虽然我仍然需要一个暴露给 vb6 的函数来满足这个要求
【问题讨论】:
-
所以,你是说 C# 不允许你需要的东西..?
-
更具体地说,COM 标准不允许我做我需要的事情。而且我想知道是否有人知道一个很好的解决方案,因为标准库多年来一直在做这种事情
-
“标准库”是否在 VB6 中实现? AFAICR 有一个特殊功能,允许您在 VB6 COM DLL 中创建特殊类,并且该类的方法对于 VB6 客户端来说似乎是静态函数。在幕后,我认为运行时创建了一个类的实例来实现这一点。我现在不记得该功能的名称了。 “全球单一用途”或“全球多用途”还是什么?我不记得你是否可以在 C# 互操作库中模拟它。如果以后有时间,我会尝试从我的书中挖掘出答案...
-
@MarkJ 如果你能找到任何关于它的信息,我很想听听。我已经把头撞在这堵墙上一天左右了,我尝试了很多不同的东西。我知道 COM 对象需要实例化,但我希望它可以在 DLL 端加载它或类似的东西(如 Init 函数)但调用它仍然会遇到添加实例化对象的相同问题
-
我不明白为什么你的 2 个 DLL 不能只拥有同名的类和同名的函数,它们的操作方式不同。为什么需要避免类引用?