14

マネージド コードではない C++ で登録せずに DLL から COM オブジェクトを使用することは可能ですか?

4

3 に答える 3

10

はい、他の登録済みオブジェクトに内部的に依存していない場合。

  1. あなたLoadLibraryはDLL
  2. あなたGetProcAddressはそのDllGetClassObject
  3. 関心のあるポインタDllGetClassObjectを取得するために呼び出しますIClassFactoryCLSID
  4. あなたは一緒に行ってIClassFactory::CreateInstance、コクラスをインスタンス化するのは良いことです
于 2012-06-18T17:51:54.800 に答える
7

DLL のマニフェスト ファイルを作成し、Registration-Free COMを使用できます。

于 2012-06-18T17:59:53.717 に答える
3

たとえば、COM DLL を登録する必要がありますが、アプリケーションには管理者アクセス権がありません。以下は、HKEY_CURRENT_USER管理者権限を必要としないDLL を登録するための簡単なハックです。

  1. LoadLibraryCOM DLL をロードするために使用します。
  2. を呼び出しGetGetProcAddressて のアドレスを取得しますDllRegisterServer
  3. を呼び出しRegOverridePredefKeyて一時レジストリをリダイレクトします: HKEY_LOCAL_MACHINEtoHKEY_CURRENT_USERおよびHKEY_CLASSES_ROOTto HKEY_CURRENT_USER\Software\Classes
  4. DllRegisterServerステップ 2 で取得したコール。
  5. レジストリのリダイレクトを逆にします。
  6. いつものように COM サーバーを使用してください。現在は に登録されていHKEY_CURRENT_USERます。
于 2015-02-11T06:48:54.097 に答える