私はdllを試し始めましたが、この問題に遭遇しました。私には2つの解決策があります(VS 2012)1. dllを生成する場所(次を含む:templatedll.h、templatedll.cpp、templatedllshort.h)2.テストする場所(したがってtemplatedllshort.hを使用)
これは私の最初の(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();
}
templatedllshort.h (これは、クラスのすべてのプライベート部分を隠す短いヘッダーです)
class __declspec(dllimport) Echo
{
public:
Echo();
Echo(int output_);
~Echo();
void echo_public();
};
私がテストする2番目のソリューション
#include "templatedllshort.h"
int main()
{
Echo e(1);
e.echo_public();
return 0;
}
すべてが適切にリンクされ、両方のソリューションがコンパイルおよび実行されます。実行時チェックの失敗は、リターン 0 の後に発生します。声明。これは期待される出力です:
Echo(int)
this is output: 1
~Echo()
誰でも問題がどこにあるかを見ることができますか? ありがとう