来自64位应用程序的32位COM组件出现问题。 (TYPE_E_CANTLOADLIBRARY)

时间:2020-08-18 09:49:06

标签: com com-interop

我已经创建了一个用于测试目的的虚拟应用程序,它是一个64位控制台应用程序,它创建了32位COM应用程序的实例。这是一个名为Laserforms的第三方应用程序。

static void Main(string[] args)
{
    LFM32.Application application;

    try
    {
        application = new LFM32.Application();
        Console.WriteLine("Success!");
        application.Quit();
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.ToString());
    }
    finally
    {
        Console.Read();
    }
}

现在,这在我的计算机上可以正常工作,但是当我将其部署到也安装了Laserform的另一台计算机上时,我会收到以下错误消息。

{System.InvalidCastException:无法将类型为“ System .__ ComObject”的COM对象转换为接口类型为“ LFM32.Application”。 该操作失败,因为对具有IID'{6688DD46-3DA3-4FEC-8A1F-54E1453DCC77}'的接口的COM组件上的QueryInterface调用 由于以下错误而失败:加载类型库/ DLL时出错。 (来自HRESULT的异常:0x80029C4A(TYPE_E_CANTLOADLIBRARY))。}

我已经通过了两者的注册表,看不到任何区别,还有什么我做错了?

更新:

因此,我在.tlb文件上运行TlbImp以创建一个我可以在.NET应用程序中引用的DLL。这创建了几个额外的DLL,以及有关Iunknown和一些无效类型的一些警告。然后,我在它和它创建的其他DLL上运行了Regasm(来自Framework和Framework64),但是我仍然看到完全相同的错误。

0 个答案:

没有答案
相关问题