CoreScanner.dll と SNAPI API を使用する C# アプリケーションがあります。開発用コンピューターではすべて正常に動作しますが、アプリケーションをクライアント PC にインストールすると、いくつかのエラーが発生します。
次のエラーのため、CLSID {} を持つコンポーネントの COM クラス ファクトリを取得できませんでした: 80080005 または次のエラーにより、IClassFactory から CLSID {} を持つ COM コンポーネントのインスタンスを作成できませんでした: 80010108。
これらのエラーのいずれも発生しない場合は、スキャナー メソッドの 1 つを呼び出したときに、オブジェクトのインスタンスに設定されていないオブジェクト参照を元に戻すことができます。
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としての私のコンピューターですが、他のコンピューターにはありません。
更新: 最終的に Motorola の Web サイトで CoreScanner ドライバーを見つけましたが、80010108 エラーは引き続き発生しますが、アプリケーションを再起動すると、すべて正常に読み込まれます。それでも失敗する理由は 100% わかりませんが、少なくともアプリケーションを閉じるまでは機能します。
更新 2: アプリケーションの再インストール後にのみ失敗するようです。その後、エラーなしで正常に閉じたり開いたりします。なぜ最初に機能しないのかはまだわかりませんが、少なくともその後は機能します。