我使用TLBIMP.EXE为商业闭源程序创建了一个包装器。 (Visual Studio不能直接引用该程序,尽管它可以在VB6中引用。)VS引用包装器就好了,并且能够创建一个对象。但是,只要在对象上调用方法,就会出现以下错误:
{“无法将'InfoWorksLib.InfoWorksClass'类型的COM对象转换为 接口类型'InfoWorksLib.IIW'。此操作失败,因为 QueryInterface在具有IID的接口的COM组件上调用 '{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上是否存在可能导致上述异常的安全问题?包装程序集是否需要位于非系统目录中?