|
ID: 30019, 64/32bit COM interop
Here an easy way to use 64bit COM classes in 32bit applications and vice a versa...
|
Download
| Details
|
|
FTP
download also available
|
|
CDN Login Required to Download. (You will be redirected to the login page if you click on the Download Link)
|
To download this, you must have registered:
|
For Delphi, Version 12.0
to 15.0
95 downloads
Copyright: Open Source or other
Size: 67,102 bytes
Updated on Fri, 10 Oct 2014 13:17:12 GMT
Originally uploaded on Fri, 10 Oct 2014 13:17:03 GMT
SHA1 Hash: 0B5EAA1B2EB12B971CB40D039E3C28E916A02D67
MD5 Hash: 0E5C80A958222B6346E9B3B908403B8B
|
Explore the files in this upload
File Exploration is Disabled
We're sorry, but errors in the uploaded zip file prevent it from being explored.
The error generated by the Zip attachment is:
You may still be able to repair the zip file contents if you download the entire zip locally. You may also want to ask the author to repost the attachment.
|
Description
|
I have created a simple unit to do the leg work.
1) Create your COM automation objects as normal.
2) add the unit "COMDLLSurrogateUnit"
3) then modify the name of the TAutoObjectFactory to TAutoObjectDLLSurrogateFactory
Here is what the changes look like:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
unit ImplTest64bitCOMUnit;
interface
uses
ComObj, ActiveX, COM64BitTest_TLB, StdVcl;
type
TTest64BitCOM = class(TAutoObject, ITest64BitCOM)
protected
procedure Testing; safecall;
end;
implementation
uses ComServ, Dialogs, COMDLLSurrogateUnit; // heavy lifting unit
procedure TTest64BitCOM.Testing;
begin
ShowMessage(ClassName);
end;
initialization
//***NOTE*** the new Automation class factory
TAutoObjectDLLSurrogateFactory.Create(ComServer, TTest64BitCOM, Class_Test64BitCOM,
ciMultiInstance, tmApartment);
end.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
How it works...
Essentially what the unit does it the follow, say you want to use a 32-bit application to call a 64bit COM class:
1) Create the 64bit COM class, make it an Automation object this should make life easier.
2) build and register the 64 bit COM DLL
3) use regedit and go to
HKey_Classes_Root\CLSID\<your GUID>
4) Add a new string value called "AppID" and give it the same value as <your GUID>
5) now go to HKey_Classes_Root\Wow6432Node\AppID\
6) add a new key with the same GUID as the CLSID i.e. <your GUID>
7) under the new key create a string value called "DllSurrogate" (without the quotes) and leave the data empty
8) the registry system should have mirrored the AppID in HKey_Classes_Root\AppID\<your GUID>
9) in the IDE in your 32bit application just link in the XXX_TLB.pas of the 64-bit COM class
10) and use COM object as normal.
To use the COM classes in components in the IDE
1) register and set up your 64-bit COM DLL as I previously described
2) you need to use the tlibimp from the \Bin64 directory to generate the component wrapping code.
3) create a package and add the generated file from 2) to the package and install the package.
All of the information on how to accomplish this is found here:
http://www.gfi.com/blog/32bit-object-64bit-environment/
|
|

Server Response from: ETNACDC04
|
Connect with Us