Pozi virtus,
lo mas facil es exportar a la dll mediante un puntero a un clase interface o funcion ( tu elijes ) una forma de reservar memoria de la heap del ejecutable. Me explico:
En el exe creas la funcion:
-- EXE.C ---
void *MyAllocMem( int _size )
{
return malloc( _size );
}
cuando llamas a la Dll con la funcion, por ejemplo, que esta exportada de la dll:
-- EXE.C ---
HRESULT InitImporter( void *_MemAllocator );
la llamas pasando el puntero a la funcion:
-- EXE.C ---
InitImporter( (void*)MyAllocMem );
En el lado de la DLL, recoges el puntero a la funcion y lo guardas en una variable:
-- DLL.C ---
void *(*MyAllocMem)(int _size);
HRESULT InitImporter( void *_MemAllocator )
{
MyAllocMem = (void *(*)(int))_MemAllocator;
y ya puedes reservar memoria que se podra liberar desde el ejecutable.
int *Memoria=MyAllocMem( 40 * 4 );
}
Si quieres liberar memoria reservada por el ejecutable desde la DLL deberas repetir la operacion para MyFreeMemm, funcion que liberaria la memoria.
Por otro lado, si estas interesado en hacerlo con un interface de clase ala COM, dimelo y te explico como es.
Ale.
}
[ Este Mensaje fue editado por: Gunder el 2002-07-04 10:49 ]
lo mas facil es exportar a la dll mediante un puntero a un clase interface o funcion ( tu elijes ) una forma de reservar memoria de la heap del ejecutable. Me explico:
En el exe creas la funcion:
-- EXE.C ---
void *MyAllocMem( int _size )
{
return malloc( _size );
}
cuando llamas a la Dll con la funcion, por ejemplo, que esta exportada de la dll:
-- EXE.C ---
HRESULT InitImporter( void *_MemAllocator );
la llamas pasando el puntero a la funcion:
-- EXE.C ---
InitImporter( (void*)MyAllocMem );
En el lado de la DLL, recoges el puntero a la funcion y lo guardas en una variable:
-- DLL.C ---
void *(*MyAllocMem)(int _size);
HRESULT InitImporter( void *_MemAllocator )
{
MyAllocMem = (void *(*)(int))_MemAllocator;
y ya puedes reservar memoria que se podra liberar desde el ejecutable.
int *Memoria=MyAllocMem( 40 * 4 );
}
Si quieres liberar memoria reservada por el ejecutable desde la DLL deberas repetir la operacion para MyFreeMemm, funcion que liberaria la memoria.
Por otro lado, si estas interesado en hacerlo con un interface de clase ala COM, dimelo y te explico como es.
Ale.
}
[ Este Mensaje fue editado por: Gunder el 2002-07-04 10:49 ]