C++-DLL and Delphi 3

Hello,

I've written a DLL in Borland C++ 5.0.  One of the functions is a simple
concatenation function :

char* __stdcall _export StringTest(char* Str1, char* Str2)
{
   char* tmp;

   int l1 = strlen(Str1);
   int l2 = strlen(Str2);

   tmp = (char*) malloc(l1+l2+1);
   strcpy(tmp, Str1);
   strcat(tmp,Str2);
   return tmp;
}

This function works fine, but it has a memory leak : the memory
allocated for tmp is not released.

This function is called from a Delphi 3 application.  Can anyone tell me
how I can release the allocated memory, prefarably from the Delphi
application ?
I've tried freeing the memory just before the return instruction, but it
doesn't work.

Thanks in advance,

Johan

pprAsked:
Who is Participating?
 
AndersWPConnect With a Mentor Commented:
ppr:

To manage memory from both Delphi and Borland C++ (or any other windows programming tool), you should use the WinAPI memory functions. I have written two code snippets in Pascal that shows how to do malloc- and free-like functions using the WinAPI. I trust you can convert to C (or whatever) and add error handling as needed:

Function WinMalloc(aSize: Integer): Pointer;

Begin
  Result:=Pointer(GlobalAlloc(GMEM_FIXED, aSize));
End;

Procedure WinFree(aPointer: Pointer);

Begin
    GlobalFree(GlobalHandle(aPointer));
End;

I hope this will help,

AndersWP
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.