C++ で記述している dll に問題があります。私が自分で解決できなかったいくつかの非常に奇妙な動作が進行中です。
何が起こっているのかを正確に説明するのは難しいですが、最善を尽くします。基本的に、DLL には、1 つのプライベート プロパティとパブリック コンストラクターを持つクラスがあります。このクラスを初期化してからプログラムを終了すると、エラーが発生します。
「実行時チェックの失敗 #2 - 変数 'test' の周りのスタックが壊れていました」
私はここに2つのプロジェクトを持っています:
- 「 testdll 」という名前の DLL 。
- 「 test 」という名前のコンソール テスト プログラム。
考えられる原因を絞り込むために、このエラーを最も単純な再現可能な形式に要約しました。以下に私のコードを示します。
プロジェクト "testdll"、ファイル testdll.h:
#include <string>
class testdll
{
public:
__declspec(dllexport) testdll(); // Empty but same error if prams are used.
private:
std::string _var;
};
プロジェクト「testdll」、ファイル testdll.cpp:
#include "testdll.h"
testdll::testdll()
{
}
プロジェクト "test"、ファイル testdll.h:
#include <string>
class testdll
{
public:
__declspec(dllimport) testdll();
};
プロジェクト "test"、ファイル stdafx.h:
#pragma once
#include "targetver.h"
#include <tchar.h>
プロジェクト "test"、ファイル test.cpp:
#include "stdafx.h"
#include "testdll.h"
int _tmain(int argc, _TCHAR* argv[])
{
testdll test;
return 0;
}
ご希望であれば、 Visual C++ 2010ソリューション ファイルを、ご希望のアーカイブ形式でお送りします。助けてください!何が起こっているのかわかりません。
オプション情報: 言語 (またはソフトウェア): C++
既に試しました: コンストラクター定義を削除します。これは機能しますが、使用可能なソリューションではなく、問題を説明するものでもありません。また、すべてのプライベート プロパティをポインターにすることもできますが、これを行う必要はありません。