0

这让我很沮丧。我有一个读取 RFID 卡的 OPOS 程序。我写了 2 个 C# COM 库。两者都可以在 Windows 7 中正常运行。其中一个很难开始工作,但我终于做到了。为了让我的 COM 库与 OPOS 程序一起工作,我必须确保目标平台是 x86。由于我有win7 pro,并且我在其他x86并运行Win XP的计算机上运行相同的程序,我启动了我的虚拟机。我已经尝试了一百万件事来试图让它发挥作用,但无济于事。我尝试过的事情

我的一个 C# 库(键盘)首先要求我不仅使用 regasm,而且我还必须将该库作为服务对象和可执行文件(即我的 OPOS 程序)放在该位置,如果我在 Win7 中搜索注册表中的 GUID 有一个名为 CodeBase 的键,它基本上是库的位置。如果我将相同的密钥放入我的 XP 机器中,我就不必在两个位置都有库。对其进行了测试,效果很好。

于是就产生了对另一个图书馆的需求。它是用 C#(与键盘相同)编写的,具有几乎完全相同的设置。两者之间的唯一区别是继承接口的网络库类具有ComSourceInterfaces(typeof(ITapEvents)并使用 Log4Net。我从未使用过 Log4Net。但为了让它编译我必须得到它,所以我只是将所有库复制到我的 Program Files 文件夹并编译。我没有运行安装程序(甚至不知道是否存在),但就像我说的那样。它适用于Win7。

我无法让它在 XP 中运行。我得到的 HResult 通常是 0x80040154。有什么线索吗?有什么我应该检查的吗?

编辑 显示 COM 对象的实例化

BOOL hasit = FALSE;
try
{
    CString str1;
    CString str2;
    str1.Format("%llu", sid); //send as decimal
    str2.Format("%llX", uid);//send as hex

    _bstr_t uidStr(str2);
    _bstr_t sidStr(str1);
    INetworkPtr obj = NULL;
    HRESULT hRes = obj.CreateInstance(_uuidof(Network));
    hasit = SUCCEEDED(hRes);
    if (hasit)
    {
        CNetwork cti(obj);
        cti.SendStrings(sidStr, uidStr);
        cti.ReleaseDispatch();
    }
    else
    {
        LogWriter::WriteError(__FUNCTION__, "Error sending Strings", (int)hRes);
    }
}
catch(...)
{
    LogWriter::WriteError(__FUNCTION__, "Error sending Strings");
    hasit = FALSE;
}
return hasit;
4

0 回答 0