Ma proposition demandait que l'appel de la fonction d'enregistrement soit fait en CLI, ce qui n'est pas le cas...
Bien entendu, le plus simple serait que l'utilisateur enregistre une classe possédant les strings, au lieu d'enregistrer les strings elles mêmes... Mais je suppose que ce n'est pas l'interface pressentie...
Est-ce que si l'utilisateur au lieu des strings standards utilise une classe à toi, mais qui a une interface d'utilisation très proche de celle de System::String, ça peut passer ? Ou encore des StringBuilders ?
Finalement, ma proposition de hacker la représentation d'une string après l'avoir pinnée quelque-part en mémoire me semble peu envisageable. En effet, si le CLR lit le code suivant :
1 2 3 4 5 6
| String m_StrNom="";
pFile.AddItem(ref m_StrNom);
// initialisation
m_StrNom = "Toto";
pFile.GetFirstRecord(); // cherche le premier record de la base
Console.WriteLine(m_strNom); |
Même si à force d'astuce on a réussi à changer le contenu de la chaîne m_StrNom, le compilateur peut lors de sa phase d'optimisation remplacer la dernière ligne par :
Console.WriteLine("Toto");
Puisqu'une string est une classe non modifiable, et qu'on n'a passé m_RefStr par référence à personne depuis qu'on lui a assigné une valeur.
Partager