使用注册免费COM激活(基于COM互操作的)ActiveX控件com
问题描述:
我有一个(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>
答
我检查olecontrol1的 “键入oletypeallowed” 属性,它是1(嵌入的OLE对象),而不是-2(ActiveX对象)的。所以对象不能正常激活。
这看起来更像是一个Visual FoxPro问题。我会发布一个关于这个问题的新问题。
我曾试过元素的miscstatus。它被忽略了。它与注册Regasm正常工作。这就是我现在正在做的事情。 但是,这是我第一次使用清单文件。我更愿意使用清单文件而不是代码来解决问题。这样,代码可以在有或没有注册的情况下以任何方式工作。我很感激您在修复清单文件时可以给我的任何帮助。 我将添加另一个评论与assembly.dll.manifest的列表 –
embnut
2010-05-18 13:49:12