Tengo un programa Delphi 2007, que llama a un DLL de Delphi 2010. El programa es grande y todavía no se ha migrado al 2010, por lo que no hay manera de que pueda cambiar esto ahora mismo.comportamiento extraño con la cadena de llamada DLL
utilizo Unidad SimpleShareMem a pasar cadenas, pero también trató con sharemem borlndmm.dll.
Para una función que ahora pasa una cadena desde el Programm Delphi 2007 a la DLL (tanto AnsiString). Al depurar el dll, este AnsiString parece normal y se puede ver en la lista de observación. Pero si hago una reflexión simple como
AnAnsiString := PassedAnsiString;
la AnAnsistring variable obtiene el valor '???????'#0#0#0'???A'
, pero PassedAnsiString sigue siendo legible en la lista. También una cadena anexa como
AnAnsiString := PassedAnsiString + NotPassedAnsiString;
usa '???????'#0#0#0'???A'
como valor.
¿Dónde está el problema? ¿Es un 2007 < -> 2010 problema? ¿Como arreglarlo? Gracias por ayuda.
hecho; Los límites de DLL solo son seguros para tipos que no son específicos de Delphi. El intercambio de tipos específicos de Delphi a través de fronteras DLL sólo funciona cuando las representaciones binarias subyacentes de estos tipos son los mismos en ambos lados de la frontera. A partir de Delphi 2009, la representación binaria de AnsiString cambió, por lo que ya no es compatible con versiones anteriores de Delphi. –
Y si el administrador de memoria es el mismo. –