Image

Imageromanticus wrote in Imageru_cpp

возврат экземпляра std::map из функции dll

Помогите разобраться!

Есть простенький код: функция возвращает экземпляр созданной внутри нее карты map
[Error: Irreparable invalid markup ('<int,>') in entry. Owner must fix manually. Raw contents below.]

Помогите разобраться!

Есть простенький код: функция возвращает экземпляр созданной внутри нее карты map<int, int>

<lj-cut text="текст программки">
#include <map>
std::map<int, int> Func()
{
std::map<int, int> imap;
imap.insert(std::map<int, int>::value_type(0, 1));
return imap;
}

Теперь вызываем эту функцию и выводим результат на экран:

#include <iostream>
int main(int argc, char* argv[])
{
std::map<int, int> emap=Func();
std::map<int, int>::const_iterator it;
for(it=emap.begin(); it!=emap.end(); ++it)
std::cout<<it->first<<"\t"<<it->second<<"\n";
return 0;
}

Все нормально, на экран выводятся 2 числа - 0 и 1.
А теперь вынесем функцию в простейшую динамическую библиотеку: win32 dll:

Файл Library.h
#include <map>
#ifdef LIBRARY_EXPORTS
#define LIBRARY_API __declspec(dllexport)
#else
#define LIBRARY_API __declspec(dllimport)
#endif

LIBRARY_API std::map<int, int> Func();

Файл Library.cpp
#include "LIbrary.h"
std::map<int, int> Func()
{
std::map<int, int> imap;
imap.insert(std::map<int, int>::value_type(0, 1));
return imap;
}

И main.cpp
#include <iostream>
#include "Library.h"
int main(int argc, char* argv[])
{
std::map<int, int> emap=Func();
std::map<int, int>::const_iterator it;
for(it=emap.begin(); it!=emap.end(); ++it)
std::cout<<it->first<<"\t"<<it->second<<"\n";
return 0;
}

При запуске - интересное: вместо одной пары чисел на экран выводятся две, из которых первая пара правильная, а вторая - мусор. Причем, вывод этого мусора заканчивается исключением в глубине стека вызовов дерева.
При отладке до возврата значения из функции все в порядке, после - что-то происходит.
В чем дело?
MSVC6 SP6, hеализация STL стандартная.
Поможите!!!
</lj-cut>