请教:生成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