dll的引用

youth_1983 2008-12-11 12:59:18
在一个项目里面声明一个类A,生成成一个dll
在另一个项目的类B里声明一个对A的引用
B想引入这个dll怎么引入,B也是要生成一个dll的,所以没有

main函数,网上找了找没有找到
...全文
143 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
killbug2004 2008-12-12
  • 打赏
  • 举报
回复
B.h
//B.H
#ifdef B_EXPORTS
#define EXPORT_CLASS __declspec(dllexport)
#else
#define EXPORT_CLASS __declspec(dllimport)
#endif
class EXPORT_CLASS B
{
public:
B() {};
~B() {};
void show();
};


B.cpp
//B.cpp
//compile:cl b.cpp /link /DLL a.lib /out:b.dll
#include <iostream>
#include "A.h"
#define B_EXPORTS
#include "B.h"
using namespace std;
void B::show()
{
A a;
cout<<"B::show is called!"<<endl;
a.show();
}

B.h和B.cpp生成b.dll,导出类B,类B通过a.dll引用A类

main.cpp
//main.cpp
//compile:cl main.cpp /link B.lib
#include <iostream>
#include "B.h"
void main()
{
B b;
b.show();
}

main.cpp生成main.exe,使用b.dll中导出类B
killbug2004 2008-12-11
  • 打赏
  • 举报
回复
生成导出类
class _declspec(dllexport) A
{
};


引用类A
要声明class _declspec(dllimport) A;还要包含导出类的库
youth_1983 2008-12-11
  • 打赏
  • 举报
回复
这里的XXXX是什么意思?

[Quote=引用 2 楼 freshairfly 的回复:]
这跟main和DLLMain有啥关系呢?

直接把class A导出,在B里面直接用A就可以了啊

#ifdef XXXX_EXPORTS
#  define XXXX_API __declspec(dllexport)
#else
#  define XXXX_API __declspec(dllimport)
#endif

class XXXX_API A
{
};

然后在A的工程设置定义宏XXXX_EXPORTS
[/Quote]
fox000002 2008-12-11
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 arong1234 的回复:]
虽然某些编译器允许导出类,个人比较不喜欢这种导出方式。
[/Quote]

不知哪些主流编译器不支持,没发现啊
arong1234 2008-12-11
  • 打赏
  • 举报
回复
虽然某些编译器允许导出类,个人比较不喜欢这种导出方式。
freshairfly 2008-12-11
  • 打赏
  • 举报
回复
这跟main和DLLMain有啥关系呢?

直接把class A导出,在B里面直接用A就可以了啊

#ifdef XXXX_EXPORTS
# define XXXX_API __declspec(dllexport)
#else
# define XXXX_API __declspec(dllimport)
#endif

class XXXX_API A
{
};

然后在A的工程设置定义宏XXXX_EXPORTS
Zark 2008-12-11
  • 打赏
  • 举报
回复
没有main函数,可是有DllMain()啊!

在DLL中引入DLL和在EXE中引入DLL一样,两种方式:显式和隐式,使用的方法同EXE中一样.
killbug2004 2008-12-11
  • 打赏
  • 举报
回复
既然你留言了,我就写个例子
A.h
//A.H
#ifdef A_EXPORTS
#define EXPORT_CLASS __declspec(dllexport)
#else
#define EXPORT_CLASS __declspec(dllimport)
#endif
class EXPORT_CLASS A
{
public:
A() {};
~A() {};
void show();
};


A.cpp
//A.cpp
//compile:cl a.cpp /link /DLL /out:a.dll
#include <iostream>
using namespace std;
#define A_EXPORTS
#include "A.h"
void A::show()
{
cout<<"show is called!"<<endl;
}

这两个文件生成a.lib和a.dll并导出类A



B.cpp
//B.cpp
//compile:cl b.cpp /link a.lib
#include <iostream>
#include "A.h"
void main()
{
A a;
a.show();
}

生成b.exe,引用a.dll中的类A
freshairfly 2008-12-11
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 youth_1983 的回复:]
这里的XXXX是什么意思?

引用 2 楼 freshairfly 的回复:
这跟main和DLLMain有啥关系呢?

直接把class A导出,在B里面直接用A就可以了啊

#ifdef XXXX_EXPORTS
#  define XXXX_API __declspec(dllexport)
#else
#  define XXXX_API __declspec(dllimport)
#endif

class XXXX_API A
{
};

然后在A的工程设置定义宏XXXX_EXPORTS

[/Quote]

XXXX你喜欢是哈就是啥,一般来说是你的DLL工程名字,表示从这个工程导出的

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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