У меня есть некоторые проблемы с выяснением причин следующих сбоев (MSVC9):
//// the following compiles to A.dll with release runtime linked dynamically
//A.h
class A {
__declspec(dllexport) std::string getString();
};
//A.cpp
#include "A.h"
std::string A::getString() {
return "I am a string.";
}
//// the following compiles to main.exe with debug runtime linked dynamically
#include "A.h"
int main() {
A a;
std::string s = a.getString();
return 0;
} // crash on exit
Очевидно, что (?) это связано с разными моделями памяти для исполняемого файла и DLL. Может ли быть, что строка A::getString()
возвращается, выделяется в A.dll и освобождается в main.exe?
Если да, то почему - и что было бы безопасным способом передать строки между DLL (или исполняемыми файлами, если на то пошло)? Без использования обложек, таких как shared_ptr, с пользовательским удалением.