如何在DLL中导出一个类的接口 以及如何调用它?

CodeProject-Jerry 2004-04-11 12:44:20
如题
----------------------------------------------------------
在vc++6.0中
现有一个不含任何对话框资源的类 比如:
class SayHello
{
private:
……属性……
public:
SayHello();
~SayHello();
float MemberFunction(int x,float y);
}
我想把这个类封装到一个dll中间去,然后把它的接口导出来,具体该这样做?
在exe中间要怎样调用?
-------------------------------------------------------

...全文
413 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
CodeProject-Jerry 2004-04-11
  • 打赏
  • 举报
回复
谢谢 大家都有分!
vcforever 2004-04-11
  • 打赏
  • 举报
回复
可以使用__declspec(dllexport) class a;
来导出一个类!

在调用的时候使用隐式连接,将DLL的.h和.lib文件包含到工程中!

就可以使用这个导出类来定义类对象了!
itmaster 2004-04-11
  • 打赏
  • 举报
回复
http://www.yesky.com/SoftChannel/72350107080589312/20040224/1771215.shtml
itmaster 2004-04-11
  • 打赏
  • 举报
回复
把C++的类写进DLL里,单独的编译。程序运行时可以快速装载并连接到DLL上,这样叫做标准的模块软件。大大提高代码的重用型。DLL是运行时的模块。

  Win32 DLL允许导出全局变量,就象导出函数一样。只要DLL申请内存,就从客户程序的进程的内存堆中进行内存分配。

  DLL包含一个导出函数表,它包含了函数在DLL内的地址,但当客户程序装入DLL时并不知道要调用的函数地址,它是通过函数的符号化名字和序号来识别这些函数的。简单的程序通常是一个EXE从一个或多个DLL导入函数;

  而实际上许多DLL调用了其他DLL里的函数。因此一个DLL可以同时有导入和导出。

  在DLL代码中,我们必须显示声明导出函数在客户方也应声明对应的导入函数:

_declspec(dllexport) int MyFunction(int n); //DLL中
_declspec(dllimport) int MyFunction(int n); //exe

  可以用将 extern"c" 加在函数声明的前面的方法来告诉编译器-需要使用普通的函数名,以防编译器产生其他语言不能使用的修饰名。

  连接DLL可以是隐式连接或显式连接,隐式连接在客户程序被装载时装载,显式连接可以决定什么时候装载或卸出,还允许我们在运行时决定装载哪个DLL。

  DLL的入口点是DllMain。进程中的每一个DLL都有一个唯一的32位HINSTANCE值所标识。此外进程本身也有一个HINSTANCE值,所有这些实例句柄只有在进程内部有效,它代表了DLL或EXE的起始虚拟地址。进程(EXE)实例句柄几乎总是0X400000,而装入在默认基地址的DLL的句柄是0X10000000,如果有多个DLL,则每个都有不同的HINSTANCE值。

  获得EXE的句柄用NULL参数调用Win32的GetModuleHandle函数,获得DLL的句柄用DLL的名字做参数调用GetModuleHandle函数。
keansun 2004-04-11
  • 打赏
  • 举报
回复
如果你想输出整个类,你只能使用Extend MFC DLL来创建dll文件,否则不可能输出整个类的。在创建的Extend MFC DLL中在你的类声明的时候加入AFX_EXT_CLASS就可以了,例如:
class AFX_EXT_CLASS MyClass:public CObject
{

}

关于在exe中使用:
把lib文件添加到工程中去,同时应该拷贝.dll到相关的目录下,比如系统目录,exe文件所在目录等等。加上#include 头文件就可以使用了

关于如何调试:
要注意你的dll工程应该打开,同时应该把最新的dll拷贝到相关目录下,这样在dll中设置的断点才能生效

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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