在DLL中,我做鑄造空指針跨越DLL
std::vector<foo*>* v = new std::vector<foo*>();
foo* f = new foo();
v->push_back(f);
// size of v is 1
process->Result = static_cast<void*>(v); // Result is of type void*
和使用DLL的一個exe,我做
if (process->Result != NULL)
{
std::vector<foo*>* v = static_cast<std::vector<foo*>*>(process->Result);
int size = v->size(); // <-- size is garbage (221232 or something like that)
}
結果必須是一個void*
。有誰知道我爲什麼不能正確地傳回載體?我在做什麼錯了嗎?
由於
的地址是雙方的一樣嗎?你是否用完全相同的運行時庫*和*編譯選項來編譯兩邊? –
@GregHewgill地址在雙方都是一樣的,但是dll是使用vs2005創建的,而exe是使用vs2010創建的。 –
對,那絕對不行。由於標準庫數據結構(如std :: vector)是在頭文件中實現的,因此編譯器版本之間的實際數據表示形式可能會有所不同。 –