2

我使用 TLBIMP.EXE 创建了一个商业闭源程序的包装器。(该程序不能直接被 Visual Studio 引用,虽然它可以在 VB6 中引用。)VS 引用包装器就好了,并且能够创建一个对象。但是,一旦我在对象上调用方法,它就会崩溃并出现以下错误:

{“无法将“InfoWorksLib.InfoWorksClass”类型的 COM 对象转换为接口类型“InfoWorksLib.IIW”。此操作失败,因为对具有 IID 的接口的 COM 组件调用 QueryInterface '{61305DAA-3868-41AD-956D-081010E80E8B }' 由于以下错误而失败:不支持此类接口(HRESULT 异常:0x80004002 (E_NOINTERFACE))。”}

我的代码如下所示:

void Function()
{
  InfoWorksLib.IIW iw = new InfoWorksLib.InfoWorksClass(); // Works
  iw.InitForTest(0, "", ""); // crashes with the above exception
}

我已经尝试了声明和创建的所有可能组合(例如InfoWorks iw = new InfoWorksClass(),等)

VS 中的对象资源管理器显示以下内容:

InfoWorksLib
    InfoWorksLib
        EIWErrors
        IIW (interface)
        InfoWorks (interface)
            Base Types (folder)
                IIW (interface)
        InfoWorksClass
            Base Types (folder)
                IIW
                InfoWorks
                    IIW
                Object

这是在 Windows 7 上。在 Windows XP 虚拟机上,相同的代码可以正常工作。

Windows 7 上是否存在任何可能导致上述异常的安全问题?包装程序集是否需要位于非系统目录中?

4

0 回答 0