View Single Post
  #1   Report Post  
Posted to microsoft.public.excel.programming
Keith Willshaw Keith Willshaw is offline
external usenet poster
 
Posts: 170
Default DLLs and VBA: Who free's a variant?


"James Scott" wrote in message
om...
Hi,

I have a VC++ DLL function which is returning a variant to VBA. The
variant contains a SAFEARRAY (by ref) allocated by the function which
may in turn contain other variants etc. All this being allocated with
CoTaskMemAlloc..

It works fine, except it looks to me like VBA doesn't deallocate the
structures it's getting back when it's finished with them. I've seen
some rumours about IDL's and [in] [out] parameters being the way to do
this, anyone got any ideas?

James


Passing data BYREF means all you are doing is passing a pointer
to the place in memory the data is stored.

If the dll is an inprocess server , that is its only called as a result
of your programme then it will be released when you set the
ActiveX Object to nothing. If its an out of process server i.e.
another programme you are attaching to then its for that programme
to do the clean out.

In the C# servers I am currently developing I definitely use
IN and OUT rather than BYREF but there is a an overhead
here. When you pass data this way you are creating a copy and
then passing it which for large data sets mau be an issue.

Keith