Search Results

Search found 5 results on 1 pages for 'cemick'.

Page 1/1 | 1 

  • Interface Marshalling in Delphi

    - by cemick
    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;

    Read the article

  • Why can't pass Marshaled interface as integer(or pointer)

    - by cemick
    I passed ref of interface from Visio Add-ins to MyCOMServer (http://stackoverflow.com/questions/2455183/interface-marshalling-in-delphi).I have to pass interface as pointer in internals method of MyCOMServer. I try to pass interface to internal method as pointer of interface, but after back cast when i try call method of interface I get exception. Simple example(Fisrt block execute without error, but At Second block I get Exception after addressed to property of IVApplication interface): procedure TMyCOMServer.test(const Interface_:IDispatch); stdcall; var IMy:_IMyInterface; V: Variant; Str: String; I: integer; Vis: IVApplication; begin ...... Self.QuaryInterface(_IMyInterface,IMy); str := IA.ApplicationName; V := Integer(IMy); i := V; Pointer(IMy) := Pointer(i); str := IMy.SomeProperty; // normal completion str := (Interface_ as IVApplication).Path; V := Interface_; I := V; Pointer(Vis) := Pointer(i); str := Vis.Path; // 'access violation at 0x76358e29: read of address 0xfeeefeee' end; Why I can't do like this?

    Read the article

  • How reduce dll size again

    - by cemick
    My dll have been bigger multiplied up many times than early for some reason. I begining to size up the situation: A source hasn't changed. Debug information everywhere turned off. Dll use package "Pack", but not include in Runtime Packages options. I've compared new dll with old version dll thought the instrumentality of PE Explore. In new dll I find out many modules with prefix 'ec' implicitly imported unlike old dll. Package "Pack" using ecControls components Dll doesn't using explicitly call to ecControls units. Why ecControls units imported in dll? Have anybody some advice?

    Read the article

1