如何引用DLL中的类

lishangshang84 2011-11-07 04:47:53
我已经制作好了类,并生成了abc.dll。如何在新建的项目下加载这个dll文件,使用其中的ClockTime类?
vs2008中的源码如下:
//头文件
#pragma once
#ifndef ClockTime_H
#define ClockTime_H

class _declspec(dllexport) ClockTime
{
private:
int hour;
int second;
int minute;
public:
ClockTime(void);
~ClockTime(void);
void setHour(int _hour);
int getHour()const;
};

#endif

//源文件
#include "StdAfx.h"
#include "ClockTime.h"

ClockTime::ClockTime(void)
{
hour=0;
second=0;
minute=0;
}

ClockTime::~ClockTime(void)
{
}

void ClockTime::setHour(int _hour)
{
hour=_hour;
}

int ClockTime::getHour()const
{
return hour;
}
...全文
228 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
s_hhm 2011-11-08
  • 打赏
  • 举报
回复
class __declspec(dllexport) ClockTime
如果在DLL中这样定义了类.你又正确的去链接了lib文件.那么就可以在应用程序中使用該类声明对象.
为了看你是不是正确的在DLL中定义了该类为导出的.你可以用 dumpbin -exports 去查看
AndyZhang 2011-11-08
  • 打赏
  • 举报
回复
静态或者动态


静态:添加头文件,#pragrma comment(lib, “XXX.lib”)

动态:loadlibrary("XXX.dll")
lishangshang84 2011-11-08
  • 打赏
  • 举报
回复
#pragma once
#ifndef ClockTime_H
#define ClockTime_H

class __declspec(dllexport) ClockTime
{
private:
int hour;
int second;
int minute;
public:
ClockTime(void);
~ClockTime(void);
void setHour(int _hour);
int getHour()const;

static ClockTime* newInstance();
static void desInstance(ClockTime* ptr);

};

#endif


//以下是Main函数

typedef ClockTime* (*Ptr)();
int _tmain(int argc, _TCHAR* argv[])
{ HINSTANCE hDll; //DLL 控制码
lpAddFun addFun; // 函数指针
Ptr ptt;

hDll = LoadLibrary(L"DLL.dll");

if (hDll != NULL)
{
ptt= (Ptr)GetProcAddress(hDll, "ClockTime::newInstance");
if (Ptr!= NULL)
{
ClockTime* c = ptt();
c->setHour(12);
}

FreeLibrary(hDll);
}
}

// c->setHour(12);报错错误3 error LNK2001: 无法解析的外部符号 "public: void __thiscall ClockTime::setHour(int)" (?setHour@ClockTime@@QAEXH@Z) hds.obj
lishangshang84 2011-11-07
  • 打赏
  • 举报
回复
1.导出DLL。
??
哪个语句能导出dll?
shenchenman 2011-11-07
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 guolijun_12304108 的回复:]
1.导出DLL。
2.在引用的地方添加类定义的头文件。
[/Quote]
++
lishangshang84 2011-11-07
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wangjunsheng 的回复:]
最好不要引用dll中的类
如果还是想用
你得把这个dll相关的lib加到你的项目中
[/Quote]

请问我在用动态库dll,干嘛再引入静态库lib,不是多此一举吗?谢谢
chensheng021 2011-11-07
  • 打赏
  • 举报
回复
同意楼上

[Quote=引用 3 楼 wangjunsheng 的回复:]
最好不要引用dll中的类
如果还是想用
你得把这个dll相关的lib加到你的项目中
[/Quote]
guolijun_12304108 2011-11-07
  • 打赏
  • 举报
回复
1.导出DLL。
2.在引用的地方添加类定义的头文件。
乃不知有汉 2011-11-07
  • 打赏
  • 举报
回复
最好不要引用dll中的类
如果还是想用
你得把这个dll相关的lib加到你的项目中
某某某 2011-11-07
  • 打赏
  • 举报
回复
你在dll中定义一个函数,用于返回一个ClockTime类对象的指针
例如
ClockTime *GetClockTime(void)
{
return new ClockTime();
}

把 ClockTime_H引入你要引用 ClockTime类的文件。
然后
ClockTime *ct = GetClockTime();
就ok了,用完别忘了释放ct。
WaistCoat07 2011-11-07
  • 打赏
  • 举报
回复
class _declspec(dllimport) ClockTime

65,187

社区成员

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

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