【问题标题】:Problem with x64 application and ActiveX controlx64 应用程序和 ActiveX 控件的问题
【发布时间】:2010-02-18 00:40:39
【问题描述】:

我有一个小型非托管 c++ 应用程序,我正在尝试使用 CoCreateInstance(...) 创建作为 ActiveX 控件安装的“Adobe SVG PLayer”实例。

当我在 32 位配置下编译和运行我的应用程序时,它可以正常工作,但是当我在 64 位配置下编译时,我的应用程序无法创建 Adove SVG Player 的实例,尽管我知道它已安装。

这是我用于执行此操作的代码:


const CLSID CLSID_SVGCtl = 
{0x377b5106,0x3b4e,0x4a2d,{0x85,0x20,0x87,0x67,0x59,0x0c,0xac,0x86}};

BOOL CheckSVGPresented()
{
    BOOL bResult = FALSE;
    try
    {
        IUnknown* pSvgCtrl = NULL;
        if (FAILED(::CoCreateInstance(CLSID_SVGCtl, NULL, CLSCTX_INPROC_SERVER, IID_IUnknown, (LPVOID*)&pSvgCtrl)) || (NULL == pSvgCtrl))
            throw 1;
        bResult = TRUE;
        pSvgCtrl->Release();

    }
    catch (...)
    {       
        bResult = FALSE;
    }
    return bResult;
}

我的猜测是我可能遇到了问题,因为我有一个 64 位主机(我的应用程序)试图创建一个 32 位的 ActiveX dll 实例(SVG 播放器)。

我正在 Windows 7 x64 位版本上进行测试。

因此,如果您对此有任何线索,我将不胜感激。

【问题讨论】:

  • 您是否为 64 位版本重新编译?

标签: c++ 64-bit activex unmanaged


【解决方案1】:

我假设您尝试加载的 ActiveX DLL 仅为 32 位。由于 ActiveX 组件通常是 InProc,而 64 位应用程序无法在 32 位 DLL 中加载,因此您的猜测是正确的。

http://thermous.spaces.live.com/blog/cns!8DC85127F8CE2F12!161.entry

【讨论】:

  • 太糟糕了,那个链接不见了。但答案是正确的,64 位进程无法加载任何形式的 32 位本机代码。或相反亦然。编译为 64 位的应用程序只能使用也是 64 位的 ActiveX。
猜你喜欢
  • 1970-01-01
  • 2012-03-02
  • 2011-06-28
  • 1970-01-01
  • 2023-03-14
  • 2023-03-03
  • 1970-01-01
  • 2011-02-04
  • 1970-01-01
相关资源
最近更新 更多