2

我有一个(基于 COM 互操作的)ActiveX 控件,我正在尝试将它与免注册 com 一起使用。当控件加载时,控件处于非活动状态(不响应事件、控件未完全呈现等)。

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

1) 对应于 COM 互操作对象的 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 控件。(如果我可以使用它来找到等效的 foxpro,我也不介意 VB 或 C# 输入)

目前我尝试了以下

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>
4

1 回答 1

1

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

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

于 2010-05-20T18:23:47.267 回答