Il y a une classe qui est compilé dans une dllComment nouveau mot-clé fonctionne en C#
//HeaderFile.h
//version 1.0
class __declspec(dllexport) A {
int variable;
//member functions omitted for clarity
};
//implementation file omitted for clarity
Vous construisez un exe qui utilise au-dessus de la classe de la dll il a été compilé dans
#include "HeaderFile.h"
int main() {
A *obj = new A();
obj->CallSomeFuncOnObj();
//
//whatever
//
}
Up jusqu'à maintenant Votre programme fonctionne bien. Mais maintenant, vous recompiler votre dll avec le code suivant
//HeaderFile.h
//version 2.0
class __declspec(dllexport) A {
int variable;
int anotherVariable;
//member functions omitted for clarity
};
//implementation file omitted for clarity
et vous ne recompiler pas votre exe mais commencer à utiliser la dll recompilé de l'ancien exe. Qu'est-ce qui se passera maintenant, c'est que votre exe a le code allouer memory = sizeof (classe A version 1.0) mais le constructeur dans votre nouvelle DLL a un code qui suppose qu'il est passé un bloc de mémoire = sizeof (classe A version 2.0). Il existe une différence de taille d'un nombre entier entre les deux - une recette pour l'imprévisibilité.
Un exemple similaire est montré dans le premier chapitre d'un excellent livre - Essential COM de Don Box. Maintenant pour la question. Dans une situation similaire dans C# (ou toute autre lang .Net), que se passerait-il?