OleControl 实例化为错误类型 - 仅在 Reg Free COM 中使用时?

发布于 2024-09-02 11:25:43 字数 965 浏览 10 评论 0原文

我有一个 ActiveX 控件(使用 C# 创建),我正在使用后期绑定将其添加到 Visual FoxPro 中的表单中。当我注册该控件时,它可以正常工作。

我想使用 reg free COM 并创建必要的清单文件。现在它加载并以非活动状态显示,直到我双击或以语法方式激活它。我不认为它与 reg free com 清单文件有任何关系。但是,在进行后期绑定调用 AddObject() 之前/之后,我需要做些什么来设置它吗?

this.AddObject('OleControl1', 'oleControl', 'SomeCompany.SomeOleControl') 

当我检查由 AddObject() 创建的 OleControl 的 OleTypeAllowed 属性时,它是 1 (嵌入式 OLE 对象)而不是 -2(ActiveX 对象)。因此 OleControl 被实例化为错误的类型。

我还尝试了以下操作:

  1. DEFINE OleControl 的子类并设置属性OleTypeAllowed = -2。使用后期绑定来加载控件。它没有按要求工作。 OleTypeAllowed 作为 1

    DEFINE 返回,是
  2. 注册了 ActiveX 控件。使用可视化编辑器将 ActiveX 控件作为子类添加到项目中。取消注册该控件。使用后期绑定来加载控件。它没有按要求工作。 OleTypeAllowed 返回为 1

是否可以将 OleControl 作为 ActiveX 控件加载?

任何可以转换为 FoxPro 的 VB 输入也将不胜感激。

I have an ActiveX control (created using C#) that I am adding to a form in Visual FoxPro using late binding. It works without problems when I register the control.

I want to use reg free COM and created necessary manifest files. Now it load and displays in an inactive state until I double click or grammatically activate it. I don't think it has anything to do with the reg free com manifest files. However is there something I need to do to set it up before/after making the late binding call AddObject()?

this.AddObject('OleControl1', 'oleControl', 'SomeCompany.SomeOleControl') 

When I check the OleTypeAllowed Property of the OleControl created by AddObject() it is 1 (Embedded OLE object) instead of -2 (ActiveX object). So the OleControl got instantiated to the wrong type.

I also tried the following:

  1. DEFINE a subclass of OleControl and set the property OleTypeAllowed = -2. Used late binding to load the control. It did not work as required. The OleTypeAllowed came back as 1

  2. Registered the ActiveX control. Added the ActiveX control to the project as a subclass using the visual editor. Unregistered the control. Used late binding to load the control. It did not work as required. The OleTypeAllowed came back as 1.

Is it possible to load the OleControl as a ActiveX control?

Any input from VB that I can convert to FoxPro would also be appreciated.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

为你拒绝所有暧昧 2024-09-09 11:25:43

您的 miscStatusContent 属性可能有误。这是我们部署的 VB6 应用程序清单中的片段:

<file name="External\COMCTL32.OCX">
    <typelib tlbid="{6B7E6392-850A-101B-AFC0-4210102A8DA7}" version="1.3" flags="control,hasdiskimage" helpdir="" />
    <comClass clsid="{9ED94440-E5E8-101B-B9B5-444553540000}" tlbid="{6B7E6392-850A-101B-AFC0-4210102A8DA7}" progid="COMCTL.TabStrip.1" threadingModel="Apartment" miscStatus="" miscStatusContent="recomposeonresize,cantlinkinside,insideout,activatewhenvisible,setclientsitefirst">
        <progid>COMCTL.TabStrip</progid>
    </comClass>
    ....
</file>

请注意,必须显式清除 miscStatus

我们使用 UMMM 在我们的自动化构建中创建清单。

You probably have the miscStatusContent attribute wrong. This a snippet from a VB6 app manifest we deploy:

<file name="External\COMCTL32.OCX">
    <typelib tlbid="{6B7E6392-850A-101B-AFC0-4210102A8DA7}" version="1.3" flags="control,hasdiskimage" helpdir="" />
    <comClass clsid="{9ED94440-E5E8-101B-B9B5-444553540000}" tlbid="{6B7E6392-850A-101B-AFC0-4210102A8DA7}" progid="COMCTL.TabStrip.1" threadingModel="Apartment" miscStatus="" miscStatusContent="recomposeonresize,cantlinkinside,insideout,activatewhenvisible,setclientsitefirst">
        <progid>COMCTL.TabStrip</progid>
    </comClass>
    ....
</file>

Notice that miscStatus has to be explicitly cleared.

We are using UMMM for manifest creation in our automated builds.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文