Я начал экспериментировать с dll и столкнулся с этой проблемой. У меня 2 решения (VS 2012) 1. Где генерировать DLL (содержит: templatedll.h, templatedll.cpp, templatedllshort.h) 2. Где проверить его (я использую поэтому templatedllshort.h)Ошибка проверки времени выполнения # 2 - поврежден стек вокруг переменной '
Так что это код моего первого (DLL) решение
templatedll.h
class __declspec(dllexport) Echo
{
private:
int output;
void echo_private();
public:
Echo();
Echo(int output_);
~Echo();
void echo_public();
};
templatedll.cpp
#include "templatedll.h"
#include <iostream>
Echo::Echo()
{
output = 0;
std::cout << "Echo()\n";
}
Echo::Echo(int output_)
{
this->output = output_;
std::cout << "Echo(int)\n";
}
Echo::~Echo()
{
std::cout << "~Echo()\n";
}
void Echo::echo_private()
{
std::cout << "this is output: " << this->output << std::endl;
}
void Echo::echo_public()
{
echo_private();
}
шаблонный llshort.h (это короткий заголовок, который скрывает все личные части моего класса)
class __declspec(dllimport) Echo
{
public:
Echo();
Echo(int output_);
~Echo();
void echo_public();
};
Второе решение, где я проверить его
#include "templatedllshort.h"
int main()
{
Echo e(1);
e.echo_public();
return 0;
}
Все правильно связаны и оба решения компилировать и запускать , Ошибка проверки времени выполнения появляется после возврата 0; заявление. Это ожидаемый результат:
Echo(int)
this is output: 1
~Echo()
Может ли один увидеть, где проблема? Спасибо
Я не думаю, что вы можете переопределить этот класс и заставить его работать. Я имею в виду, что класс должен быть того же размера в публичном и закрытом заголовке. – drescherjm