
怎么创建使用ADO访问数据库的动态链接库?
我想用类的方法做成动态链接库应该怎么做?假如我在ADO.h中定义了一个类CMyAdoconnectclassCMyAdoconnect{public:CMyAdoconn...
我想用类的方法做成动态链接库应该怎么做?
假如我在ADO.h中定义了一个类CMyAdoconnect
class CMyAdoconnect
{
public:
CMyAdoconnect();
~CMyAdoconnect();
bool Open(LPCSTR lpAccess,long Options=adModeUnknown);//打开Access数据库
bool Open(LPCSTR pServer,LPCSTR pClass,LPCSTR pUid,LPCSTR pPassword,long Options=adModeUnknown);//打开SQL数据库
bool Execute(LPCTSTR lpstrExec);
_ConnectionPtr GetActiveConnection(){return m_connect;};
long BeginTransaction()
{return m_connect->BeginTrans();};
long CommitTransaction()
{return m_connect->CommitTrans();};
long RollbackTransaction()
{return m_connect->RollbackTrans();};
bool IsOpen();
void Close();
protected:
_ConnectionPtr m_connect;
};
在ADO.cpp中实现了这些函数,把这两个文件放在MFC中的源代码中使用正常,但我想做成动态链接库,这样别人就只能看到我的头文件,而看到不我怎么实现的。可当我新建一个Win32 Dynamic-Link Library,把上面的代码放进去的时候编译错误,大概意思是里面的成员都是未定义的,然后我在头文件中加入<windows.h>也还是不行,应该怎么样做成类似的动态链接库?就是在其中有CString之类的,以类的方式定义的,我想MFC当中的类也是这样的方式吧?
新建MFC DLL 有三个选项,我应该选哪个?还有我看了那里面都有自定义的App类,这个类有什么用?我这个类应该放在什么地方? 我只想知道在类中有MFC成员的时候做动态链接库的具体方法。 谢谢~~ 展开
假如我在ADO.h中定义了一个类CMyAdoconnect
class CMyAdoconnect
{
public:
CMyAdoconnect();
~CMyAdoconnect();
bool Open(LPCSTR lpAccess,long Options=adModeUnknown);//打开Access数据库
bool Open(LPCSTR pServer,LPCSTR pClass,LPCSTR pUid,LPCSTR pPassword,long Options=adModeUnknown);//打开SQL数据库
bool Execute(LPCTSTR lpstrExec);
_ConnectionPtr GetActiveConnection(){return m_connect;};
long BeginTransaction()
{return m_connect->BeginTrans();};
long CommitTransaction()
{return m_connect->CommitTrans();};
long RollbackTransaction()
{return m_connect->RollbackTrans();};
bool IsOpen();
void Close();
protected:
_ConnectionPtr m_connect;
};
在ADO.cpp中实现了这些函数,把这两个文件放在MFC中的源代码中使用正常,但我想做成动态链接库,这样别人就只能看到我的头文件,而看到不我怎么实现的。可当我新建一个Win32 Dynamic-Link Library,把上面的代码放进去的时候编译错误,大概意思是里面的成员都是未定义的,然后我在头文件中加入<windows.h>也还是不行,应该怎么样做成类似的动态链接库?就是在其中有CString之类的,以类的方式定义的,我想MFC当中的类也是这样的方式吧?
新建MFC DLL 有三个选项,我应该选哪个?还有我看了那里面都有自定义的App类,这个类有什么用?我这个类应该放在什么地方? 我只想知道在类中有MFC成员的时候做动态链接库的具体方法。 谢谢~~ 展开
1个回答
展开全部
因为使用了MFC,所以你只能建立一个MFC动态库,而不是win32动态库。并且用AFX_EXT_CLASS 标记放在你的类名前面。
相关资料见下文。
如何在VC中导出类,这是一个常有人问起的问题,下面我以一个简单的例子来说明这个问题:
首先使用Wizard创建一个Win32 Dynamic-Link Library工程,然后定义一个简单的C++类CInDLL。由于该类会
被工程之外的文件所引用,所以需要对这个类进行引出。因为只有引出后所生成的DLL中才带有供足够的信息以在连接和运行时被正确引入到进程空间中。有两种
方法可以引出类,使用__declspec(dllexport)定义和使用定义文件。
下面先讲使用__declspec(dllexport)的方法:将类定义改为:class __declspec(dllexport)
CInDLL 就可以了。(译者:你也许不相信会有这么简单,我也不相信。:-) 这样产生的工程在编译时是正确的但是在使用时会产生错误,因为你包含
的头文件中也是使用__declspec(dllexport),而使用这个DLL的工程中并没有引出这个类,而是需要引入这个类)在使用时需要将类定义
改为class __declspec(dllimport) CInDLL就可以了。
使用定义文件可以有效的避免这个问题,这种方法是利用宏定义在不同的地方产生不同的编译代码:在头文件中加入如下的代码:
#ifdef _CLASSINDLL
#define CLASSINDLL_CLASS_DECL __declspec(dllexport)
#else
#define CLASSINDLL_CLASS_DECL __declspec(dllimport)
#endif
#endif // ClassInDLL_H
//将class __declspec(dllexport) CInDLL改为
class CLASSINDLL_CLASS_DECL CInDLL
{
CInDLL();
...
}
在实现这个类的CPP文件的顶部加入#define _CLASSINDLL语句。
#define _CLASSINDLL
CInDLL::CInDLL()
{
}
...
这样一来在使用这个类时就可以不做任何改动了。
(译者:这中方法在没有使用MFC时可以使用,如果你使用MFC生成MFC DLL那么只要做如下定义就可以了class AFX_EXT_CLASS yourClass)
相关资料见下文。
如何在VC中导出类,这是一个常有人问起的问题,下面我以一个简单的例子来说明这个问题:
首先使用Wizard创建一个Win32 Dynamic-Link Library工程,然后定义一个简单的C++类CInDLL。由于该类会
被工程之外的文件所引用,所以需要对这个类进行引出。因为只有引出后所生成的DLL中才带有供足够的信息以在连接和运行时被正确引入到进程空间中。有两种
方法可以引出类,使用__declspec(dllexport)定义和使用定义文件。
下面先讲使用__declspec(dllexport)的方法:将类定义改为:class __declspec(dllexport)
CInDLL 就可以了。(译者:你也许不相信会有这么简单,我也不相信。:-) 这样产生的工程在编译时是正确的但是在使用时会产生错误,因为你包含
的头文件中也是使用__declspec(dllexport),而使用这个DLL的工程中并没有引出这个类,而是需要引入这个类)在使用时需要将类定义
改为class __declspec(dllimport) CInDLL就可以了。
使用定义文件可以有效的避免这个问题,这种方法是利用宏定义在不同的地方产生不同的编译代码:在头文件中加入如下的代码:
#ifdef _CLASSINDLL
#define CLASSINDLL_CLASS_DECL __declspec(dllexport)
#else
#define CLASSINDLL_CLASS_DECL __declspec(dllimport)
#endif
#endif // ClassInDLL_H
//将class __declspec(dllexport) CInDLL改为
class CLASSINDLL_CLASS_DECL CInDLL
{
CInDLL();
...
}
在实现这个类的CPP文件的顶部加入#define _CLASSINDLL语句。
#define _CLASSINDLL
CInDLL::CInDLL()
{
}
...
这样一来在使用这个类时就可以不做任何改动了。
(译者:这中方法在没有使用MFC时可以使用,如果你使用MFC生成MFC DLL那么只要做如下定义就可以了class AFX_EXT_CLASS yourClass)
参考资料: http://www.wangchao.net.cn/bbsdetail_66360.html

2023-08-29 广告
"StormProxies是全球大数据IP资源服务商,其住宅代理网络由真实的家庭住宅IP组成,可为企业或个人提供满足各种场景的代理产品。点击免费测试(注册即送1G流量)StormProxies有哪些优势?1、IP+端口提取形式,不限带宽,I...
点击进入详情页
本回答由Storm代理提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询