Re: Passing an image from one process to another one
wpr wrote:
Your IDL declaration has to specify the size of all arrays -
otherwise the marshalling code will assume they have the size of 1.
Something like this:
HRESULT WriteImages(
[out, size_is(, 3*width*height)] BYTE ** pLeft,
[out, size_is(, 3*width*height)] BYTE ** pRight,
[in] long width, [in] long height, [out] long * pPictureStep,
[in] long x, [in] long y, [out] long * currentfocus);
I've tried to specify the size and it's still not working.
Show your current IDL declaration. Define "not working".
Did you notice the comma right after the open paren in size_is
attribute? It's not a typo, it's significant.
I've followed the code like written here:
http://serious-code.net/moin.cgi/Scrap_2fComTutorial_2fDataMarshalling
And this code is not working. The diference i noticed is that my
interfaces are marked with oleautomation and the ones on the example
do not.
Your interface is not automation-comptabile, so there's no point in
marking it [oleautomation] - you are not fooling anybody. I bet you get
MIDL warnings to that effect, and ignore them.
I've tried to remove this but then my client cannot find the
Interface. Do you think the oleautomation is the problem here?
Yes. Remove the attribute, then build and register proxy/stub DLL. You
are trying to use TLB-driven marshalling, but size_is attribute is not
representable in TLB.
Alternatively, you could make your interface automation-compatible by
using SAFEARRAYs instead of conformant arrays.
--
With best wishes,
Igor Tandetnik
With sufficient thrust, pigs fly just fine. However, this is not
necessarily a good idea. It is hard to be sure where they are going to
land, and it could be dangerous sitting under them as they fly
overhead. -- RFC 1925