私の会社では、サードパーティの DLL を使用して一部のハードウェアに接続しています (hwLib
ここで名前を変更しました)。それはずっと前にVB6で書かれたと思います。DLL には、自身を登録するためのインストーラーなどが付属しています。
それを使用し、XPおよびWin7、32または64ビットで問題なく動作するC#アプリがあります。しかし、XP/32 ビットでは正常に動作するが、Win7/64 ビットではクラッシュする単純な C++ コンソール アプリを作成しました。コンソール アプリは次のようになります。
#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[] 引数) で mainCRTStartupStrArray(String[] 引数) で
はるかに大きく複雑なプログラムである C# プログラムは、ここに投稿しますが、同じシステム上で問題なく実行されます。
COM は私の時代より前です - おそらく 10 年か 15 年前に COM のコースを受講しましたが、覚えていません - これのデバッグを開始する方法について何か提案はありますか? ありがとう!!