【发布时间】:2011-03-02 21:51:40
【问题描述】:
我在尝试从旧的(但仍保持维护)VB6exe project(*) 源构建ActiveX dll 时偶然发现了这一点,以便通过COM / NET 互操作执行一些测试。
(期望的)用例是:
- 使用带有公共方法的
VB6类获取或返回一些控制(例如CommonDialog)参考 - 将此类编译为 ActiveX dll
- 通过 COM 互操作从 .NET 创建此类的实例并正确调用其方法
简而言之,第一个问题是有类似的东西
Public Function bad_dlg() As CommonDialog
Set bad_dlg = Nothing
End Function
在 Visual Basic 6 ActiveX dll 的类文件中,编译 (* *) 失败并出现以下错误:
“私有对象模块不能在公共对象模块中用作公共过程的参数或返回类型、公共数据成员或公共用户定义类型的字段”
因此,问题是:
- 真的不能像上面那样编译运行正常吗?
- [IF NOT] 假设,我将所有内容更改为返回和接收
VB6Object类型的实例 -- 我如何从 .Net 使用这样的实例(调用特定方法等)
(*) -- 不是ActiveX exe,只是一个“普通”的
(* *) 前提是引用了适当的.ocx ("Microsoft Common Dialog Control 6.0 (SP6)", C:\Windows\system32\ComDlg32.OCX)
(* * *) 我找到的唯一一个是Passing control Ref to dll
【问题讨论】:
-
不是完全相同的副本,因为 C# 是客户端,但您可能对 this question 也感兴趣,它还涉及通过 COM 互操作传递 VB6 控件引用。
-
@MarkJ(谢谢,现在已经很清楚了)VB6 专家经常“巡逻”,所以当被一些晦涩的话题困扰时,再好不过了!
标签: vb6 com-interop ocx