UserControlを使用するVB6で記述されたプロジェクトがあります。プロジェクトは、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
、2番目のケースで呼び出されたときに失敗します。
何か案が?!
編集:私の悪い、ここにマニフェストがあります。
<?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>