예, 다음과 같은 방법으로 대리 용으로 32 비트 전용 DLL을로드하고 64 비트 프로세스에서 액세스 할 수 있습니다. 사용할 수있는 마샬 러가 있으면 일반적으로 표준 마샬 러를 사용하기 때문에 일반적으로 형식 라이브러리가있는 구성 요소가있을 경우 작동합니다. 객체가 64 비트 버전이 존재하지 않거나 처음부터이 문제가 없기 때문에 객체가 사용자 정의 prox/stub을 요구하면 작동하지 않습니다.
먼저 AppID가 필요합니다. DLL에 이미 AppID가있는 경우이를 사용해야합니다. 관심있는 CoClass의 CLSID 키를 확인하면 알 수 있습니다.
여기에 사용 된 예제는 Capicom.HashedData
및 Capicom.EncryptedData
클래스입니다. Capicom은 32 비트 전용입니다.
32 비트 버전이므로 Regedit의 32 비트 버전을 사용해야합니다. 32 비트에서 액세스하려는 64 비트 구성 요소가있는 경우 다른 구성 요소를 사용하십시오. (이것은 32 비트 호환성 레이어의 레지스트리 가상화 때문입니다. regedit의 일치하는 bitness 버전을 사용하면 올바른 가상 버전의 레지스트리를 편집하여이 문제를 해결할 수 있습니다.
Windows Registry Editor Version 5.00
;;; Capicom AppID - just using the Capicom.EncryptedData CLSID
;;; Use default surrogate = empty string
[HKEY_CLASSES_ROOT\AppID\{A440BD76-CFE1-4D46-AB1F-15F238437A3D}]
"DllSurrogate"=""
;;; Capicom.EncryptedData
[HKEY_CLASSES_ROOT\CLSID\{A440BD76-CFE1-4D46-AB1F-15F238437A3D}]
AppID="{A440BD76-CFE1-4D46-AB1F-15F238437A3D}"
;;; Capicom.HashedData - use same AppID for all!!!!!
[HKEY_CLASSES_ROOT\CLSID\{CE32ABF6-475D-41F6-BF82-D27F03E3D38B}]
AppID="{A440BD76-CFE1-4D46-AB1F-15F238437A3D}"
myComponent-dllhost.reg
파일에 저장하면됩니다.
c:\windows\sysWow64\regedit.exe "myComponent-dllhost.reg"
이제 64 비트 스크립트/COM 호스트에서 Capicom.HashedData 및 Capicom.EncryptedData에 액세스 할 수 있어야합니다.
참고 : 기본 OLE 자동화 유형에 대한
- 이 경우에만 작동합니다. VBScript 또는 JavaScript의 Windows Scripting Host 스크립트와 호환되는 모든 개체는 OK 여야합니다.
- 직접 생성 가능한 개체에만 AppID를 추가해야합니다. 기본적으로 InprocServer32 항목이 있습니다. 팩토리에서 생성되거나 자식 객체로만 사용할 수있는 객체에는 AppID가 추가 될 필요가 없습니다.
- 이미 AppID가있는 경우 빈 문자열 "DllSurrogate"항목을 추가하면됩니다. 그게 다야!
- 은 DLL의 일반 클라이언트에 영향을줍니다. 비트가 일치하는 한 이전과 마찬가지로 프로세스 내에서 계속로드됩니다. 유일한 차이점은 다른 bitness의 클라이언트에서 out-of-process를 인스턴스화하는 것이 가능해진다는 것입니다.
출처
2012-01-17 19:35:17
Ben
http://msdn.microsoft.com/en-us/library/windows/desktop/ms682432 % 28v = vs.85 % 29.aspx –
사용자 지정 대리자가 서버 구성 요소에 AppID가 있어야하므로 COM은 클래스를 인스턴스화 할 대리자를 알 수 없습니다. ? 이를 추가하면 이는 내 구성 요소뿐만 아니라 모든 클라이언트에도 영향을 미칩니다. 표준 구성의 대리인은 잘 작동해야합니다. –
[Raymond Chen] (http://blogs.msdn.com/b/oldnewthing/archive/2009/02/12/9413816.aspx)는 Explorer가 * DllSurrogate로 등록되지 않은 'CoCreateInstance' 개체를 어떻게 든 사용할 수 있다고 제안합니다 * 그들이 대리모에서 만들어 지도록 열쇠 - 나는 방법에 흥미가있을 것입니다. –