私はこのサイトのチュートリアルに従っています:
http://progtutorials.tripod.com/COM.htm
暫定的な証拠: Visual Studio 2010、Windows 7 64 ビット。
セクション 3 の例をコーディングしています (サーバー DLL の実装)。示されているとおりにコードを正確に入力しましたが、セクション 4.1 で概説されているコードの 12 行目でこのコードを実行すると、「クラスが登録されていません」という例外が発生します (チュートリアルでは DLL にアクセスする方法が示されています。 3.1 の文字に従った):
hresult hr = CoGetClassObject(CLSID_Car, CLSCTX_SERVER, NULL, IID_IClassFactory, (void **) &pClassFactory);
実行してみました:
regsvr32 xyz.dll
xyz.dll は、DLL を登録するための DLL へのパスです。これにより、DLLRegisterServer を見つけようとしてエラーが発生しました:
私はすでに実行しました
REGEDIT
HKEY_CLASSES_ROOT\CarDLL.Car\CLSID = {d969084c-b758-43ea-a218-a48763167abd}
HKEY_CLASSES_ROOT\CLSID\{d969084c-b758-43ea-a218-a48763167abd} = CarDLL.Car
HKEY_CLASSES_ROOT\CLSID\{d969084c-b758-43ea-a218-a48763167abd}\InProcServer32 = C:\Users\wiocl2\Documents\Visual Studio 2010\Projects\CarDLL\debug\CarDLL.dll
必要なすべての GUID をレジストリに入れると仮定しました (GUID は私が生成したものです)。
クラスに関数を追加して登録できるようにする必要があると思いますが、これを行う方法とそれを理解する方法がわかりません。私は長い間 COM を使っていなかったので、ちょっと迷っています。誰かが私に正しい方向に押し込むことができれば、それは役に立ちます。
編集:そうそう、#include を移動しました // DEFINE_GUID の定義が含まれています
そうしないと、ビルド時に未解決の外部エラーが発生していました。