我有一个使用 CoreScanner.dll 和 SNAPI API 的 C# 应用程序。在我的开发计算机上一切正常,但是一旦我在客户端 PC 上安装应用程序,它就会出现一些错误。
由于以下错误,检索具有 CLSID {} 的组件的 COM 类工厂失败:80080005 或从 IClassFactory 创建具有 CLSID {} 的 COM 组件的实例失败,因为以下错误:80010108。
如果我没有得到这些错误中的任何一个,我可以在调用其中一个扫描仪方法时返回未设置为对象实例的对象引用。
try
{
try
{
cCoreScanner = (CCoreScannerClass)Activator.CreateInstance(typeof(CCoreScannerClass));
}
catch (Exception e)
{
using (LogManager lm = new LogManager())
{
lm.WriteErrorTextLog(e, "Setup Scanner - Splash Screen - Scanner Created");
}
}
short[] scannertTypes = new short[1];
scannertTypes[0] = 1;
short numberOfScannerTypes = 1;
int[] connectedScannerList = new int[255];
try
{
cCoreScanner.Open(0, scannertTypes, numberOfScannerTypes, out status);
}
catch (Exception e)
{
using (LogManager lm = new LogManager())
{
lm.WriteErrorTextLog(e, "Setup Scanner - Splash Screen - Scanner Open " + status.ToString());
}
}
try
{
cCoreScanner.GetScanners(out numberOfScannerTypes, connectedScannerList, out outXML, out status);
}
catch (Exception e)
{
using (LogManager lm = new LogManager())
{
lm.WriteErrorTextLog(e, "Setup Scanner - Splash Screen - Get Scanners " + status.ToString());
}
}
try
{
xmlDoc = new XmlDocument();
}
catch (Exception e)
{
using (LogManager lm = new LogManager())
{
lm.WriteErrorTextLog(e, "Setup Scanner - Splash Screen - XML Create");
}
}
try
{
xmlDoc.LoadXml(outXML);
}
catch (Exception e)
{
using (LogManager lm = new LogManager())
{
lm.WriteErrorTextLog(e, "Setup Scanner - Splash Screen - XML Load");
}
}
try
{
scannerID = xmlDoc.DocumentElement.GetElementsByTagName("scannerID").Item(0).InnerText;
}
catch (Exception e)
{
using (LogManager lm = new LogManager())
{
lm.WriteErrorTextLog(e, "Setup Scanner - Splash Screen - Get ScannerID");
}
}
try
{
cCoreScanner.BarcodeEvent += new _ICoreScannerEvents_BarcodeEventEventHandler(onBarcodeScan);
inXML = "<inArgs>" +
"<scannerID>" + scannerID + "</scannerID>" +
"</inArgs>";
cCoreScanner.ExecCommand(2014, inXML, out outXML, out status);
opCode = 1001;
inXML = "<inArgs>" +
"<cmdArgs>" +
"<arg-int>1</arg-int>" + // Number of events you want to subscribe
"<arg-int>1</arg-int>" + // Comma separated event IDs
"</cmdArgs>" +
"</inArgs>";
cCoreScanner.ExecCommand(opCode, ref inXML, out outXML, out status);
}
catch (Exception e)
{
using (LogManager lm = new LogManager())
{
lm.WriteErrorTextLog(e, "Setup Scanner - Splash Screen - Enable Scanner, Subscribe to barcode event");
}
}
}
catch (Exception ex)
{
using (LogManager lm = new LogManager())
{
lm.WriteErrorTextLog(ex, "Setup Scanner - Splash Screen");
}
}
我不确定我哪里出错了。我已经注册了 DLL,SNAPI 驱动程序安装在客户端上,并且我使用 123Scan 实用程序来设置扫描仪以进行 SNAPI 输入。客户端是 Win 7 64 位,但我也一直在 Win XP 上进行测试并得到相同的结果。在 Win 7 32 位上开发,唯一的区别是我的电脑作为 SDK,而其他的则没有。
更新:我终于在摩托罗拉网站上找到了 CoreScanner 驱动程序,但是仍然会出现 80010108 错误,但是如果您重新启动应用程序,一切正常。不是 100% 确定为什么它仍然失败,但至少它可以工作到应用程序关闭。
更新2:似乎只有在重新安装应用程序后才会失败。之后它将关闭/打开很好,没有错误。仍然不知道为什么它第一次不起作用,但至少在那之后它起作用了。