Så lykkes det at få løst problemet!
Selvom begge DLL'er er kompileret med samme lib, som i dette tilfælde er /MD og /MDd, samt at begge DLL'er kører i samme memory space, så er stadig problemer med håndtering af delt hukommelse og STL.Det helt generelle problem er blevet identificeret til at der er problemer med data, der er allokeret dynamisk, mens der ikke ser ud til at være problemer med data, der er allokeret statisk.
Jeg har valgt at løse problemet på følgende måde, hvor der tages udgangspunkt i den forrige kommentar jeg har skrevet:
static std::vector<class Object*> CONTAINER;
static std::vector<class Object*>::iterator ITE_CONTAINER;
bool MyClass::getAll()
{
// Fetches all data needed...
CONTAINER.clear();
while (recordset.hasData())
{
Object * pObj = new Object(...);
CONTAINER.push_back(pObj);
}
ITE_CONTAINER = CONTAINER.begin();
return true;
}
bool MyClass::getNext(Object &obj)
{
if (ITE_CONTAINER == CONTAINER.end())
return false;
obj.setXXX(*m_iteObj->getXXX());
...
ITE_CONTAINER++;
return true;
}
Det kan eventuelt vælges at placere containeren og iteratoren på klassen i stedet for at de ligger som globale variable, hvilket designmæssigt også er pænere.
Kaldet til DLL'en foregår på følgende måde:
MyAPI::getAll();
Object obj;
while (MyAPI::getNext(obj))
{
...
}
Den mest markante ændring, der er foretaget er at der i stedet for at bruge pointere på tværs af DLL'erne nu bliver brugt referencer! og ved overførsel af data, så kopieres der data ind i et objekt, som er allokeret af modtager DLL'en. Endvidere skal man sørge for at der for ens domæne objekter er lavet en copy-constructor, som netop tages i brug ved kopiering af objekternes data (se min forrige kommentar for signaturen af denne). Herved er det ikke blot adresserne til domæne objekternes data, der bliver kopieret.
Hth
Indlæg senest redigeret d. 16.11.2006 11:08 af Bruger #10448