У меня есть проект, написанный на VB6, который использует UserControl. Проект работает нормально, когда OCX зарегистрирован, но если я запускаю тот же проект с параллельным манифестом, это приводит к ошибке.
Я могу использовать элемент Control без проблем, пока он загружается статически (добавлен ранее в форму), но если я добавлю динамический элемент управления в форму при любом использовании нового элемента управления (свойства или метода), я получаю эту ошибку:
Объект не поддерживает это свойство или метод
Эту ошибку можно воспроизвести так:
- Создайте проект OCX на VB6
- Добавить пользовательский элемент управления
- Добавьте метод, например
DoSomething
к контролю - Создать exe-проект
- Добавьте элемент управления в форму, например
UserControl1
- В случае звонка
DoSomething
Загружать динамически Like:
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>