Hola,
Tengo desarrollada en VC++ ( VS 6.0 ) una mini libreria 3d.
Cuando la voy a utilizar desde C# me da problemas, especifico el problema mirando de abstraerme de lo que realiza:
Tengo una función en la DLL MiFunc que mas o menos realiza lo siguiente:
char * MiFunc ( void )
{
char *v;
v = new char[255];
return v;
}
Desde C# Sharp la uso de la siguiente forma:
String s;
s=MiFunc ( )
El problema es que muchas veces funciona, y otras pocas da un ERROR... y ese error ejecutandose 2 o 3 veces el mismo código puede que desaparezca, y aparezca en otro sitio o desaparezca completamente, o vete a saber...
Me he planteado que la gestion de memoria de C# con el Framework i el Garbage Collector no reaccionará bien, para liberar mem reservada desde la DLL, aunque esten el la misma dirección de procesos... habia pensado que, mejor pasar un string y rellenarlo desde la DLL, de modo que esta no tenga que reservar memoria... pero como hago esto ?
si pongo desde la DLL...
void MiFunc ( char * v )
{
strcpy (v,"Hola");
}
y en C#....
String s;
...
MiFunc (s); o // MiFunc (out s);
el valor de s no varia.
alguna idea ?
;)
Tengo desarrollada en VC++ ( VS 6.0 ) una mini libreria 3d.
Cuando la voy a utilizar desde C# me da problemas, especifico el problema mirando de abstraerme de lo que realiza:
Tengo una función en la DLL MiFunc que mas o menos realiza lo siguiente:
char * MiFunc ( void )
{
char *v;
v = new char[255];
return v;
}
Desde C# Sharp la uso de la siguiente forma:
String s;
s=MiFunc ( )
El problema es que muchas veces funciona, y otras pocas da un ERROR... y ese error ejecutandose 2 o 3 veces el mismo código puede que desaparezca, y aparezca en otro sitio o desaparezca completamente, o vete a saber...
Me he planteado que la gestion de memoria de C# con el Framework i el Garbage Collector no reaccionará bien, para liberar mem reservada desde la DLL, aunque esten el la misma dirección de procesos... habia pensado que, mejor pasar un string y rellenarlo desde la DLL, de modo que esta no tenga que reservar memoria... pero como hago esto ?
si pongo desde la DLL...
void MiFunc ( char * v )
{
strcpy (v,"Hola");
}
y en C#....
String s;
...
MiFunc (s); o // MiFunc (out s);
el valor de s no varia.
alguna idea ?
;)