我有一个用 VB6 编写的使用 UserControl 的项目,该项目在注册 OCX 时运行良好,但如果我使用并排清单运行同一个项目,则会导致错误。
我可以毫无问题地使用控件,只要它是静态加载的(之前在表单上添加),但是如果我在任何使用新控件(属性或方法)时添加动态控件以形成表单,我会收到此错误:
对象不支持此属性或方法
可以通过这种方式重现此错误:
- 在 VB6 中创建 OCX 项目
- 添加用户控件
- 添加一个方法,例如添加
DoSomething
到控件中 - 创建一个exe项目
- 将控件添加到窗体,例如
UserControl1
- 在事件调用中
DoSomething
动态加载喜欢:
Dim y As Control UserControl1.DoSomething '<-------- CASE(1) THIS IS ALLRIGHT!' Set y = Controls.Add("Project1.UserControl1", "y") y.DoSomething '<---- (CASE 2) THIS WILL FAIL USING SXS'
我将 WinDbg 中的错误跟踪到IDispatch::GetIDsOfNames
在第二种情况下调用时将失败。
任何想法?!
编辑:我的错,这是清单。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity name="client.exe" version="1.0.0.0" type="win32" processorArchitecture="x86"/>
<file name="Project1.ocx">
<comClass
clsid="{C8CF7991-A8F2-4360-9404-03C9A052C245}"
description="Project1.UserControl1"
tlbid="{47853CCC-7BE6-4377-9C82-38A0B7755F65}"
threadingModel="apartment"
miscStatusContent="recomposeonresize,cantlinkinside,insideout,activatewhenvisible,setclientsitefirst"
progid="Project1.UserControl1"/>
<typelib
tlbid="{47853CCC-7BE6-4377-9C82-38A0B7755F65}"
version="1.0"
helpdir=""
flags="control,hasdiskimage"/>
</file>
<comInterfaceExternalProxyStub
iid="{0E4F313E-7EF3-4FE6-9591-9F7D2D819AEE}"
name="UserControl1"
proxyStubClsid32="{00020424-0000-0000-C000-000000000046}"/>
<comInterfaceExternalProxyStub
iid="{53307849-4F14-4A59-B0CA-DE4950CE499D}"
name="UserControl1"
proxyStubClsid32="{00020420-0000-0000-C000-000000000046}"/>
</assembly>