我遇到了用C++編寫的DLL的問題。有一些非常奇怪的行爲繼續,我一直無法自己解決。當C++ DLL程序退出時:運行時檢查失敗#2
很難描述到底發生了什麼,但我會盡我所能。基本上我有一個類,在我的DLL中有一個私有屬性和一個公共構造函數。 當我初始化這個類,然後退出程序時,我得到一個錯誤。
「運行時檢查失敗#2 - 堆棧圍繞變量 '測試' 是 損壞」
我有2項目這裏:
- 的DLL命名「testdll」。
- 命名爲「測試」控制檯測試程序。
我把這個錯誤歸結爲最簡單的可重複的形式來試圖縮小可能的原因,下面你會發現我的代碼。
工程 「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()
{
}
項目的 「測試」,文件testdll .H:
#include <string>
class testdll
{
public:
__declspec(dllimport) testdll();
};
項目的 「測試」,stdafx.h文件:
#pragma once
#include "targetver.h"
#include <tchar.h>
項目的 「測試」,文件TEST.CPP:
#include "stdafx.h"
#include "testdll.h"
int _tmain(int argc, _TCHAR* argv[])
{
testdll test;
return 0;
}
如果你想我可以在視覺送你C++ 2010解決方案文件,以您選擇的歸檔格式。請幫忙!我不知道發生了什麼事。
可選信息: 語言(或軟件):C++
已經嘗試過: 刪除構造函數的定義,它的工作原理,但不是一個可用的解決方案,也沒有說明這個問題。也使我所有的私人物業成爲指針作品,但我不應該這樣做。
DLL項目和使用它的測試項目都在相同的解決方案中文件,所以這些類型的環境問題不應該造成這一點,據我所知。 – Aloxis 2012-04-29 06:23:19
@Aloxis:仍然有許多每個項目設置需要處理,必須完美匹配。另外,並非所有的設置都可以使用。 'std :: string'分配內存,兩個項目都必須設置爲使用共享運行時分配器(使用DLL運行時庫)。 – 2012-04-29 06:28:10
我不知道這意味着什麼,明天我會看看它,當我沒有那麼疲憊,看看它是否能解決這個問題。非常感謝您花時間回答。 – Aloxis 2012-04-29 06:53:36