Hi Morten!
Are you still readily setup to zip and put a release online? Then the
auto gc will be available without cvs.
Then, I would like the cvs HEAD to be a playground for the next couple
of months (i.e. possibly some breakages while the HEAD gets some changes)
There will be some new stylesheets and I also decided to make some
transition stylesheets that use new features as they become available
but falls back on the old marshaling when necessary.
Best regards,
Roger
Morten Andersen wrote:
Hi Al,
Ok. Then I think we have a problem. I looked into the native marshalling
in Transform.cpp, and for VT_BYREF combined with "simple" types, like
e.g. VT_UI1 we set the VARIANT reference (e.g. for VT_BYREF|VT_UI1:
*pbVal in the VARIANT-struct) to point to a *one-byte* allocated
reference.
This is the source from Transform.cpp which takes care of this (you can
see that we only SafeMalloc one byte:
byte* pbyte = (byte*)MarshalAllocator::SafeMalloc(sizeof(byte), m_pbr);
// set the value to the java-value (if any)
*pbyte = (byte)in.readByteOrDie();
// and finally write the pointer to the out stream
out.writeIntOrDie((int)pbyte);
So I am pretty sure that your request can only be satisfied by adding
support for this in both the CPP and Java-marshalling code. That would
also require some thought on what java-types should marshal into this.
E.g.
- a ByrefHolder(byte[])-instance is already used for marshalling to
VT_ARRAY|VT_UI1|VT_BYREF.
- a simple byte[]-instance is already used for marshalling to
VT_ARRAY|VT_UI1.
Unfortunately I don't have the equipment (I am mostly on Mac lately),
software tools (VC++) or time for working out such a change right now.
So to answer your originally question in short:
"Can JAWIN marshall a byte array by ref?"
We unfortunately only support to marshall to VARIANT SafeArray's, and
don't support plain-old-style C byte*-arrays. We only support these for
old-style DLL exported functions.
Sorry to disappoint you.
Best Regards
Morten