把C++的类编译生成一个dll,在另一个C++工程里怎么访问dll中的类,注意是类,不是函数:)?

rambooo 2008-07-13 06:10:35
虚心求教:)
...全文
147 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
星光伴月 2008-07-14
  • 打赏
  • 举报
回复
能导出类的DLL,不是普通的DLL,可能是微软专用的吧,那样的DLL,其他语言也用不了呀,所以觉得没有多大意义。
mymtom 2008-07-14
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 taodm 的回复:]
导出class的扩展dll,水是比较深的。
建议珍惜生命,远离扩展dll。
[/Quote]
严重同意。
taodm 2008-07-14
  • 打赏
  • 举报
回复
导出class的扩展dll,水是比较深的。
建议珍惜生命,远离扩展dll。
277894613 2008-07-14
  • 打赏
  • 举报
回复
楼上的方法没有问题
但导出类不具有通用性,只有C签名的导出函数才能方便的被多语言识别和重用
baichuan0698 2008-07-13
  • 打赏
  • 举报
回复
先在dll中将类导出
class __declspec(_exports) 类名
{}

在要调用的文件里链接引入库,在包含dll文件的头文件,就可以直接用这个类了。
mymtom 2008-07-13
  • 打赏
  • 举报
回复
俺一般用命令行编译,IDE应该更简单吧:

//
// foo.h
//

#ifndef FOO_H
#define FOO_H

#ifdef FOO_EXPORTS
#define FOO_API __declspec(dllexport)
#else
#define FOO_API __declspec(dllimport)
#endif

class FOO_API Foo {
public:
Foo();
int get_id(void);
void set_id(int id);
private:
int m_id;
};

#endif // FOO_H


//
// foo.cpp
//

#define FOO_EXPORTS
#include "foo.h"

Foo::Foo()
{
m_id = 0;
}

int Foo::get_id(void)
{
return m_id;
}

void Foo::set_id(int id)
{
m_id = id;
}


//
// main.cpp
//

#include <stdio.h>

#include "foo.h"

int
main(void)
{
Foo foo;

printf("%d\n", foo.get_id());
foo.set_id(10);
printf("%d\n", foo.get_id());
return 0;
}

[code=BatchFile]
@echo off
REM
REM build.bat
REM
@echo on

cl /nologo /c foo.cpp
link /nologo /dll /out:libfoo.dll foo.obj
cl /nologo /c main.cpp
link /nologo /out:foo.exe main.obj libfoo.lib
[/code]

输出:
[code=BatchFile]
J:\mymtom\play\C++\dll\libfoo>foo.exe
0
10
[/code]
矛盾博弈 2008-07-13
  • 打赏
  • 举报
回复
访问类? 有什么意义吗 楼主
caimps 2008-07-13
  • 打赏
  • 举报
回复
class AFX_EXPORT_CLASS className
iwong 2008-07-13
  • 打赏
  • 举报
回复
不知道LZ具体什么意思,下面代码可作参考
class SampleClass
{
public:
SampleClass& GetSampleClass()
{
return *this;
}
/*.........
* other members of the class
*/
};


或者

class Sample
{
//...........
};

class GetClass
{
public:
//下面仅提供了默认构造函数和析构函数,强烈建议自行添加拷贝构造函数和重载赋值函数
GetClass()
:sample(new Sample) //调用Sample类的构造函数,如果是调用有参构造函数,代码自行添加
{
}
~GetClass()
{
delete sample;
}
public:
//const Sample* GetSampleClass() const
//{
// return sample;
//}
Sample* GetSampleClass()
{
return sample;
}
private:
Sample* sample;
};
rularys 2008-07-13
  • 打赏
  • 举报
回复
DLL中有"类"么?

64,654

社区成员

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

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