我的公司使用第 3 方 DLL 来连接某些硬件(我在hwLib
这里重命名了它)。我认为它是很久以前用 VB6 编写的。DLL 附带一个安装程序来注册自身等。
我们有一个使用它的 C# 应用程序,它在 XP 和 Win7、32 或 64 位上运行得很好。但我写了一个简单的 C++ 控制台应用程序,它在 XP/32 位上运行良好,但在 Win7/64 位上崩溃。控制台应用程序看起来像这样,
#include "stdafx.h"
using namespace System;
int main(array<System::String ^> ^args)
{
using namespace hwLib;
ChwLib^ myLib = gcnew ChwLib();
String^ str = myLib->GetDllVersion();
Console::WriteLine(L"Hello hwLib");
Console::WriteLine(str);
Console::ReadLine(); //to keep window open til you hit the "any" key
return 0;
}
未处理的异常:System.InvalidCastException:无法将“hwLib.ChwLibClass”类型的 COM 对象转换为“hwLib._ChwLib”类型的接口。
此操作失败,因为 IID 为“{E0560D1E-9A54-4EBF-83E8-D7BD2C936512}”的接口的 COM 组件上的 QueryInterface 调用由于以下错误而失败:
不支持此类接口(HRE SULT 异常:0x80004002 (E_NOINTERFACE))。在 System.StubHelpers.StubHelpers.GetCOMIPFromRCW(Object objSrc, IntPtr pCPCMD, Boolean& pfNeedsRelease) 在 hwLib.ChwLibClass.GetDllVersion() 在 main(String[] args) 在 mainCRTStartupStrArray(String[] arguments)
C# 程序是一个更大、更复杂的程序,否则我会在这里发布它,它在同一个系统上运行没有问题。
COM 早于我的时代 - 我可能在 10 或 15 年前参加过它的课程,但我不记得了 - 关于如何开始调试这个有什么建议吗?谢谢!!