Re: I want to pass a complex data type (class) to my COM component. Neat way of doing this?
Actually, you don't need to do any of that with BSTRs. See
SysAllocStringByteLen(). It's a common misconception that
BSTRs only store UTF-16 strings. It's what they are designed
for, but they also have a huge by-design loophole and can
legitimately store binary data.
--
=====================================
Alexander Nickolov
Microsoft MVP [VC], MCSD
email: agnickolov@mvps.org
MVP VC FAQ: http://vcfaq.mvps.org
=====================================
"Matthew Ireland" <mireland@intercall.com> wrote in message
news:OFXBPDhXIHA.1204@TK2MSFTNGP03.phx.gbl...
My favorite "cheat" is to create a buffer declared as a BSTR and memcpy
the struct in.
NOTE:
o This breaks one of the COM contracts in that both ends need to have
intimate binary knowledge to access the data
o You have to make sure you pad the BSTR to an even byte if your
structure is an odd byte size
o You should also pad the buffer with an additional 2 bytes and set these
to 0 to keep with the basic BSTR usage
"Simon L" <silangdon@hotmail.com> wrote in message
news:116aef09-3e6e-4254-b9d8-5b51ee15f15a@y5g2000hsf.googlegroups.com...
Because I want my app. to support multiple customers who have slightly
different requirements, I want to put a chunk of code in a dll, eg a
COM object, pass my class containing the data to it and have the dll
process it.
I've been adding ATL COM components to my app. for a while, and there
are a limited number of datatypes supported by the wizard (and if you
try to define your own the compiler doesn't like the undefined class
and the idl file doesn't support C++ syntax does it? I tried defining
a class it it baulked at the idea anyway).
So, pass things as void* and cast?
Thanks.