COM对象适用于Win7但不适用于XP

时间:2013-03-28 14:27:33

标签: c# windows-7 com windows-xp com-interop

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

我的一个C#库(键盘)起初要求不仅我使用regasm而且我必须在该位置将该库作为Service对象和可执行文件(即我的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;

0 个答案:

没有答案