首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

关于Activex Exe传递对象变量的有关问题

2012-01-01 
关于Activex Exe传递对象变量的问题先上代码:Activex Exe工程名:TestClass类模块:Class1代码:Option Expli

关于Activex Exe传递对象变量的问题
先上代码:
Activex Exe工程名:TestClass
类模块:Class1
代码:
Option Explicit

Private m_StdTestPic As StdPicture

Public Property Get TestPic() As StdPicture
  Set TestPic = m_StdTestPic
End Property

Public Property Set TestPic(ByVal StdValue As StdPicture)
  Set m_StdTestPic = StdValue
End Property

标准Exe代码:
Option Explicit
Dim a As New Class1

Private Sub cmdCommand1_Click()
  Set a.TestPic = Me.Icon
End Sub

问题:
当TestClass编译为ActiveX Exe时标准Exe执行
Set a.TestPic = Me.Icon出错
当TestClass编译为ActiveX Dll时标准Exe执行
正常执行
请高手指条明路,不单是StdPicture不能传递,像ImageList控件对象等都不能用
String等类型都能正常操作

[解决办法]
Activex Exe在底层处理可能不太一样吧

String等类型(包含数组、记录集等还有很多),在底层数据结构中是包含长度等信息的。(参见 VB圣经)
这种情况是在set 时,处于不同线程的深拷贝,所以??
在同一线程应该不会出现这种情况的吧?
你可以建一个类模块试试

以上纯属猜测。
[解决办法]
Windows下的一些说法是:基于线程保护,一个线程不可直接访问另一个线程的对象。只能通过线程间的3种通信方式来间接访问。
我不知道有没有这个说法,也不知道是不是这样的。
共同研究??
[解决办法]
Activex Exe与主EXE是两个独立的进程.

对象的传递,在VB里实际是对象指针的传递,然后增加一个引用计数.

对象本身还是同一个实例.

因此作为DLL时是同一进程,即进程内部件,则通过这个指针是可以访问到的.

而作为Activex Exe时则是进程外对象了,需要跨进程,估计就没戏.....
[解决办法]
stdpicture对象转byte数组,怎么转呢?

建议用propertybag转

热点排行