一段看似简单但出错的代码,求解

匠人的op 2009-01-17 08:03:49
请问各位高人,以下代码为何运行失败
该代码分两个工程(VC6编译)
Test.dll工程由Test.h, Test.cpp组成
Main.exe包含Main.cpp文件,依赖Test.dll

Test.dll工程
//----------------------------------------------------
// Test.h

#pragma once

#ifdef TEST_EXPORTS
#define TEST_API __declspec(dllexport)
#else
#define TEST_API __declspec(dllimport)
#endif

#include "Test.h"

#include <vector>
using namespace std;

class TEST_API Test
{
public:
void PushInts(vector<int>& vec, int num);
};

TEST_API void PushInts2(vector<int>& vec, int num);

//-----------------------------------------------------



//-----------------------------------------------------
// Test.cpp

#define TEST_EXPORTS
#include <windows.h>
#include "Test.h"

BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
return TRUE;
}

void Test::PushInts(vector<int>& vec, int num)
{
vec.push_back(num);
}

void PushInts2(vector<int>& vec, int num)
{
vec.push_back(num);
}
//-----------------------------------------------------

Main.exe工程
//-----------------------------------------------------
#include "Test.h"

int main(int argc, char* argv[])
{
vector<int> vec;
Test t;
t.PushInts(vec, 1);
return 0;
}
//-----------------------------------------------------
...全文
125 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
fox000002 2009-01-17
  • 打赏
  • 举报
回复
珍惜生命,远离 DLL

应该是 crt 的问题,跟内存分配机制有关

DLL 和 exe 都使用 DLL 版的 runtime library 倒是不会有问题
匠人的op 2009-01-17
  • 打赏
  • 举报
回复
我只是想知道vector在dll中做push_back,在exe中析构为何就会出错
sagegz 2009-01-17
  • 打赏
  • 举报
回复
我放在了两个文件中,可以运行.

//Test.h
#pragma once

#ifdef TEST_EXPORTS
#define TEST_API __declspec(dllexport)
#else

#define TEST_API __declspec(dllimport)
#endif

#include "Test.h"

#include <vector>
using namespace std;

class TEST_API Test
{
public:
void PushInts(vector <int>& vec, int num);
};

TEST_API void PushInts2(vector <int>& vec, int num);


//Test.cpp
#define TEST_EXPORTS

#include <windows.h>
#include "Test.h"

BOOL APIENTRY DllMain( HMODULE hModule,DWORD ul_reason_for_call,LPVOID lpReserved){
return TRUE;
}

void Test::PushInts(vector <int>& vec, int num){
vec.push_back(num);
}

void PushInts2(vector <int>& vec, int num){
vec.push_back(num);
}

int main(int argc, char* argv[]){
vector <int> vec;
Test t;
t.PushInts(vec, 1);
return 0;
}

可以运行.

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧