Re: operator new[] fails in DLL when being called from within VB6 process



Hi,

thanks for your answer. However, I noticed that the problem causing line of code was aonther one - not the memory allocazion. So I have solved the problem now.
However, I still do not know why VS.Net showed me a completely wrong stack when the exception was raised though all symbols should have been correct - but this is another topic.


But btw - calling CoInitialize() in DllMain() is actually very forbidden ;) Though it works (I once used it by myself), you are actually only allowed to call functions in kernel32.dll.

Thanks,
  Jo

Hector Santos wrote:

In lieu of showing code, you might need to call CoInitialize() or
CoInitializeEx() when the DLL is first loaded.

I can't remember the details, and our DLL is a complex multi-threaded RPC
client/server wire handler for client applications,  but I recall running
into similar memory related GPFs when 3rd party VB6 applications were
importing our standard client/server WINAPI based dlls.  Every native
language applications (C/C++, Delphi, etc) worked fine except VB6-based
applets.

You would call CoInitialize() in DLL_PROCESS_ATTACH and you would call
CoUninitialize() in DLL_PROCESS_DETACH.

PS: You didn't mention it, but if your DLL uses threads, you definitely need
to call CoInitialize().

--
Hector Santos, Santronics Software, Inc.
http://www.santronics.com


"Jo Siffert" <jo.siffert@xxxxxxx> wrote in message news:eVdyCYm1FHA.1028@xxxxxxxxxxxxxxxxxxxxxxx

Hi,

I have written a DLL in C/C++ which is used by a VB6 program. Everything
works fine unless the DLL uses the operator new[] - e.g.

  m_pBuffer = new CHAR[ dwApproxPayloadLen ];

then an Access Violation Exception is thrown within ntdll!_RtlAllocHeap.

Calling
  CFoo *f = new Cfoo()
works just fine - only arrays will not work.

The same code works just fine when being called from a C/C++ program.

Is there something special about calling CRT functions when my lib is
loaded into a VB6 process? Maybe VB6 does not initialize the CRT as it
does not use it or something like that?

Thanks in advance,
  Jo


.