Laufzeitfehler _pFirstBlock == pHead
Dieser Fehler tritt auf wenn eine Klasse einer Dll nicht in dieser mit new angelegt und mit delete auch wieder in dieser gelöscht wird.
Die Dlls nutzen bei statischen Runtimes verschiedene MemoryManager.
Deshalb muss darauf geachtet werden, dass die Allocierten Blöcke sich nicht
überschneiden.
Beispiel mit Fehler
Exportierte Dll
class __declspec(dllexport) ExternalClass
{
public
// Constructor
ExternalClass(){}
// Destructor
~ExternalClass(){}
};
Importierende Applikation
class __declspec(dllimport) ExternalClass
int main()
{
ExternalClass* pTempClass = new ExternalClass();
delete pTempClass; //<- Fehler tritt hier auf.
}
Lösungsvorschlag
Durch exportieren von new und delete in Funktionen die zusammen mit der Klasse exportiert werden, löst dieses Problem auf einfache Weise.
In meinen Sourcen löse ich das auf folgende Weise.
Exportierte Dll
class __declspec(dllexport) ExternalClass
{
public
// Constructor
ExternalClass(){}
// Destructor
~ExternalClass(){}
static ExternalClass* create()
{ return new ExternalClass(); }
static void remove(ExternalClass* pToRemove)
{ delete pToRemove; }
};
Importierende Applikation
class __declspec(dllimport) ExternalClass
int main()
{
ExternalClass* pTempClass = ExternalClass::create();
ExternalClass::remove(pTempClass); //<- Fehler tritt nicht mehr auf.
}