Interface Marshalling in Delphi
Posted
by cemick
on Stack Overflow
See other posts from Stack Overflow
or by cemick
Published on 2010-03-16T14:33:55Z
Indexed on
2010/03/16
14:36 UTC
Read the original article
Hit count: 535
I want to send Interface Ref of IVApplication from Visio Add-in to my other one COM server. But I have Ole exception. Now i do that:
Code in Visio Add-in:
var
IStrm: IStream;
hres: HResult;
rhglobal: HGLOBAL;
VisioAppl: IVApplication;
begin
hres := CreateStreamOnHGlobal(0, TRUE, IStrm);
if Succeeded(hres) then
hres := CoMarshalInterface(IStrm, IID_IVApplication, VisioAppl,
MSHCTX_LOCAL, 0,
MSHLFLAGS_NORMAL);
if (Succeeded(hres)) then
begin
hres := GetHGlobalFromStream(IStrm, rhglobal);
IStrm := nil;
end;
end;
After this I create instance of my COM server and pass rhglobal to him.
Code of my COM server:
procedure (AHGlobal: HGlobal);
var
VisioAppl: Visio_TLB.IVApplication;
iStrm: IStream;
hres: HResult;
begin
iStrm := Nil;
VisioAppl:= nil;
hres := CreateStreamOnHGlobal(AHGlobal, FALSE, iStrm);
if (SUCCEEDED(hres)) then
begin
hres := CoUnmarshalInterface(iStrm, Visio_TLB.IVApplication, VisioAppl);
iStrm := nil;
ShowMessage('Result:' + BoolToStr(SUCCEEDED(hres))); <-- result 0
ShowMessage(VisioAppl.ProductName); <---- Error
end;
end;
© Stack Overflow or respective owner