Det var vidst mere et tilfælde at det rent faktisk lykkes sidst for ved de resterende iteratorer var den fløjtende ligeglad. :-(
Hvad jeg prøvede, det var at have container og iterator liggende lokalt i min forretningsdll og lave en iteratormetode, som bruger den intern iterator og returnerer objekterne fra containeren.
Iterator og container er ikke placeret på den klasse som er eksporteret, men på et niveau længere nede.
Igen fungerer det fint i debuggeren men når programmet kører udenfor debuggeren, så brager det ned.
Begge DLL'er er kompileret med lib, som er: /MDd og /MD
class MyClass
{
public:
...
bool getAll()
{
// Fetches all data needed...
while (recordset.hasData())
{
Object * pObj = new Object(...);
m_container.push_back(pObj); // Still fails !!!
}
iteObj = m_container.begin();
}
bool getNext(Object ** ppObj)
{
if (m_iteObj == m_container.end())
return false;
*ppObj = *m_iteObj;
m_iteObj++;
return false;
}
private:
std::vector<class Object*> m_container;
std::vector<class Object*>::iterator m_iteObj;
}
#ifndef MYDLL_BUILD
#ifdef _DEBUG
#pragma comment(lib, "MyDllD.lib")
#else
#pragma comment(lib, "MyDll.lib")
#endif
#define MYDLL_API __declspec(dllimport)
#else
#define MYDLL_API __declspec(dllexport)
#endif
class MYDLL_API Object
{
...
}
class MYDLL_API MyAPI
{
static MYDLL_API bool getAll()
{
MyClass * instance = MyFactory::getMyClass();
return instance->getAll();
}
static MYDLL_API bool getNext(Object ** ppObj)
{
MyClass * instance = MyFactory::getMyClass();
return instance->getNext(ppObj);
}
}
Herefter bliver det kaldt på følgende måde:
MyAPI::getAll(); // Fails here!!!
Object * pObj = NULL;
while (MyAPI::getNext(&pObj))
{
...
}
Nogle idéer?!
Pft.
Indlæg senest redigeret d. 15.11.2006 16:56 af Bruger #10448