マネージド コードではない C++ で登録せずに DLL から COM オブジェクトを使用することは可能ですか?
8717 次
3 に答える
10
はい、他の登録済みオブジェクトに内部的に依存していない場合。
- あなた
LoadLibrary
はDLL - あなた
GetProcAddress
はそのDllGetClassObject
- 関心のあるポインタ
DllGetClassObject
を取得するために呼び出しますIClassFactory
CLSID
- あなたは一緒に行って
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 を登録するための簡単なハックです。
LoadLibrary
COM DLL をロードするために使用します。- を呼び出し
GetGetProcAddress
て のアドレスを取得しますDllRegisterServer
。 - を呼び出し
RegOverridePredefKey
て一時レジストリをリダイレクトします:HKEY_LOCAL_MACHINE
toHKEY_CURRENT_USER
およびHKEY_CLASSES_ROOT
toHKEY_CURRENT_USER\Software\Classes
。 DllRegisterServer
ステップ 2 で取得したコール。- レジストリのリダイレクトを逆にします。
- いつものように COM サーバーを使用してください。現在は に登録されてい
HKEY_CURRENT_USER
ます。
于 2015-02-11T06:48:54.097 に答える