2010-05-17 89 views
2

我有一个(COM Interop基础)ActiveX控件,我试图使用免费注册com。当控件加载控件无效(不响应事件,控制不完全呈现等)。使用注册免费COM激活(基于COM互操作的)ActiveX控件com

经过大量搜索,我发现使用reg-free-com的COM对象使用miscStatus属性来设置初始状态以正确激活。我知道如何将它与一个与本机COM对象相对应的comClass一起使用。

1)对应于COM-interop对象的clrClass元素的等效项如下?

<comClass clsid="{qqqqqqqq-wwww-eeee-rrrr-00C0F0283628}"    
    tlbid="{xxxxxxxx-yyyy-zzzz-aaaa-0000F8754DA1}"    
    threadingModel="Both"     
    progid="SomeCompany.SomeOleControl"    
    description="Some ActiveX Control" 
    miscStatus="recomposeonresize,insideout,activatewhenvisible,nouiactivate" > 

2)我使用的COM客户端是Visual FoxPro。如果(1)不可行我可以在VFP中做什么来激活不活动的ActiveX控件。 (我不介意VB或者C#的输入太多,如果我可以用它来寻找等效的FoxPro)

目前我尝试以下

this.AddObject('OleControl1', 'oleControl', 'SomeCompany.SomeOleControl') 
this.OleControl1.AutoActivate = 3 
this.OleControl1.Visible = .T. 
this.OleControl1.SetFocus 

但我的OleControl1得到传递的事件,如鼠标点击之前集中子元素。所以我必须点击两次才能进行必要的操作,任何时候它都没有焦点。我希望控件能够像设置miscStatus值的“nouiactivate”一样工作。

3)有没有其他的方式来完成我想要做的事情?

Hans Passant,这里是当前Assembly.dll.manifest的列表。评论中的格式使其无法阅读。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 

<assemblyIdentity name="Assembly" 
version="1.0.0.0" type="win32" publicKeyToken="wwwwwwwwwwwwwwww"/> 
<clrClass 
name="SomeCompany.SomeOleControl" 
clsid="{qqqqqqqq-wwww-eeee-rrrr-00C0F0283628}" 
progid="SomeCompany.SomeOleControl" 
threadingModel="Both"/> 
<file name="Assembly.tlb"> 
<typelib 
    tlbid="{xxxxxxxx-yyyy-zzzz-aaaa-0000F8754DA1}" 
    version="1.0" 
    helpdir="" 
    flags="hasdiskimage"/> 
</file> 
</assembly> 
+0

元素没有miscstatus。我怀疑这是问题所在,如果使用Regasm.exe而不是清单,它是否可以正常工作? – 2010-05-17 20:06:50

+0

我曾试过元素的miscstatus。它被忽略了。它与注册Regasm正常工作。这就是我现在正在做的事情。 但是,这是我第一次使用清单文件。我更愿意使用清单文件而不是代码来解决问题。这样,代码可以在有或没有注册的情况下以任何方式工作。我很感激您在修复清单文件时可以给我的任何帮助。 我将添加另一个评论与assembly.dll.manifest的列表 – embnut 2010-05-18 13:49:12

+0

embnut 2010-05-18 13:50:37

回答

1

我检查olecontrol1的 “键入oletypeallowed” 属性,它是1(嵌入的OLE对象),而不是-2(ActiveX对象)的。所以对象不能正常激活。

这看起来更像是一个Visual FoxPro问题。我会发布一个关于这个问题的新问题。