我想把自己的类生成在.lib里面,请问应该怎么办? 多谢指教俺是新手 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 呵呵,一看到你的这个问题就知道真的是新手。首先,Lib文件不是可执行文件,里面没有可执行部分。你知道DLL吧,实际上DLL是个二进制文件,里面有可执行代码、资源等等。但是我们的调用程序如何知道从哪里开始执行该二进制文件哩?这时候必须给定一个接口,告诉调用DLL文件的程序在调用的时候从哪里开始进入,或者说DLL中导出的函数入口有哪些。这时候才引入了Lib文件,因此Lib文件实际上是DLL导出函数的定义。至于你的想用DLL导出一个类,我不太明白你的意思,如果是一个类的话,完全可以将类的声明文件和实现文件包含到另一个项目中去。这样类就有了。当然如果你不想让别人看到你的类的实现就令当别论了。我的做法是在DLL中定义一个基类:class Base { public: Base() {} ~Base() {} virtual int func1(int xxx,float xxx) {return 0;} virtual int func2(void) {}};然后,根据派生类可以根据C++的多态性,声明基类的派生类,将基类的虚拟函数全部实现:class Derive : public Base { Derive() {} ~Derive() {} int func1(int xxx,float xxx) {....} // 具体实现 int func2(void) {.....} // 具体实现}然后声明一个对象的导出函数:extern "C" __declspec(dllexport) Derive * CreateObj(){ return new Derive ;}在你的项目中先要加入生成的Lib文件,然后加入基类的定义文件例如:#include "Base.h"class Derive : public Base ; // 注意这个是要先声明Derive类是从Base //类中派生出来的class xxxxxView : public CView{ ...//声明一个基类的指针Base *m_pBase ;};在实现文件中加上导入函数的声明:extern "C" __declspec(dllimport) Derive * CreateObj() ;然后你就可以使用了:CxxxView::OnTestXXX(){ m_pBase = CreateObj(); m_pBase->func1(2,3); m_pBase->func2(); delete m_pBase ;}就可以了。这样可以导出派生类的虚拟函数覆盖基类的函数,又可以保护你的Derive类的实现细节。我已经做过试验了,VC6下面没有问题。 新建一个lib工程把你的文件的.h和cpp包进去,编译就搞顶了不过如上面仁兄说的,你要的是不是不是这个呀! 我的类本来就在.h中亚,而且是从cstatic继承的,我现在的问题不是怎么用这个lib,而是如何生成lib,如果设置这个工程 IP安全策略和本地安全策略 数据结构字符串操作Replace函数?? 算法设计 如何完全隐蔽后台程序(用于正常商业行为) 时间格式的搜索问题 处理文本中的字符串 高分 请教,关于CDC的,给出详细说明和具体用法,msdn上的也算,SaveDC(), RestoreDC(-1), SetOutputDC(), SetAttribDC CArray作为函数形参,在函数调用时该怎么用? VC实现图片上加文字,要用控制台实现,后台处理不能显示 获得函数 地址 需要用 取地址符号吗? 编辑框,里面是数字,右边有两个箭头,上面是使+1,下面是使-1,VC有这种控件吗? 请问列表视图的颜色设置
一看到你的这个问题就知道真的是新手。
首先,Lib文件不是可执行文件,里面没有可执行部分。你知道DLL吧,实际上DLL是个二进制文件,里面有可执行代码、资源等等。但是我们的调用程序如何知道从哪里开始执行该二进制文件哩?这时候必须给定一个接口,告诉调用DLL文件的程序在调用的时候从哪里开始进入,或者说DLL中导出的函数入口有哪些。这时候才引入了Lib文件,因此Lib文件实际上是DLL导出函数的定义。
至于你的想用DLL导出一个类,我不太明白你的意思,如果是一个类的话,完全可以将类的声明文件和实现文件包含到另一个项目中去。这样类就有了。当然如果你不想让别人看到你的类的实现就令当别论了。我的做法是在DLL中定义一个基类:
class Base {
public:
Base() {}
~Base() {}
virtual int func1(int xxx,float xxx) {return 0;}
virtual int func2(void) {}
};
然后,根据派生类可以根据C++的多态性,声明基类的派生类,将基类的虚拟函数全部实现:
class Derive : public Base {
Derive() {}
~Derive() {}
int func1(int xxx,float xxx) {....} // 具体实现
int func2(void) {.....} // 具体实现
}
然后声明一个对象的导出函数:
extern "C" __declspec(dllexport) Derive * CreateObj()
{
return new Derive ;
}
在你的项目中先要加入生成的Lib文件,然后加入基类的定义文件例如:
#include "Base.h"
class Derive : public Base ; // 注意这个是要先声明Derive类是从Base
//类中派生出来的
class xxxxxView : public CView
{
...
//声明一个基类的指针
Base *m_pBase ;
};
在实现文件中加上导入函数的声明:
extern "C" __declspec(dllimport) Derive * CreateObj() ;
然后你就可以使用了:
CxxxView::OnTestXXX()
{
m_pBase = CreateObj();
m_pBase->func1(2,3);
m_pBase->func2();
delete m_pBase ;
}
就可以了。这样可以导出派生类的虚拟函数覆盖基类的函数,又可以保护你的Derive类的实现细节。我已经做过试验了,VC6下面没有问题。
把你的文件的.h和cpp包进去,编译就搞顶了
不过如上面仁兄说的,你要的是不是不是这个呀!