读书人

请问:生成dll遇到了麻烦老是说文件

发布时间: 2012-02-26 20:19:44 作者: rapoo

请教:生成dll遇到了麻烦,老是说文件损坏,请教。
请教:生成dll遇到了麻烦,老是说文件损坏,请教。

我用visual studio 2005 SP1 编译以下一个建立的例子:

第一个是一个dll工程,有以下两个文件,而且在项目属性-> 配置属性-> 常规中将配置类型设置为动态库(.dll):
文件test1.h

#ifndef __test1_h__
#define __test1_h__

class __declspec(dllexport) Test
{
public:
Test(int a, int b)
:x(a), y(b)
{
}

~Test();

int Add();
private:
int x;
int y;
};

#endif

文件test1.cpp

#include "test1.h "

Test::~Test()
{

}

int Test::Add()
{
return x+y;
}

这个工程是编译成功了,生成了一个test.dll的文件

然后第2个工程:
文件main.cpp
#include "../test/test1.h "
#include <windows.h>
#include <iostream>

using namespace std;

#pragma comment(lib, "../test/Debug/test.dll ")

int main()
{
Test a(1,2);
cout < < a.Add();
int stop;
cin > > stop;
return 0;
}

结果老是报告说:
1 fatal error LNK1107: 文件无效或损坏: 无法在 0x2F0 处读取

后来我又试着在第2个工程的属性-> 配置属性-> 连接器-> 输入-> 附加依赖项中加入这个dll文件,也提示这个错误.

然后我改用LoadLibrart()函数.直接提示我的是找不到Test::Add的定义.

最后我在项目依赖项中把工程1设置为第2个工程的依赖项目.这样就编译通过了.

但着实没想明白为什么会出现上面几个问题.

[解决办法]
要加入.lib而不是dll
你改一下#pragma comment(lib, "../test/Debug/test.lib ")
dll都会生成一个这个的.
good luck

读书人网 >C++

热点推荐