如果你是导出的是普通的C++类,那么调用者不一定要是MFC程序啊,普通的程序也可以,反正是用VC++写的都行,因为你导出的时候它会生成一个lib,里面保存了函数名各种信息,VC++都能识别的,跟MFC没关系
所以说,网上的一些说法有点片面,MFC扩展DLL,他们都把它认为是这个DLL都只导出MFC的类了,其实这是不对的,它除了可以导出MFC类,还可以导出非MFC类,导出方法还是一样,只不过这个类不是继承CObject,而是你自己定义的类;如果导出的函数是C标准那种,那么这个扩展的MFC DLL其实一样可以被其它语言调用的
说得有点啰嗦了,希望你能理解;最后偷偷告诉你吧,其实无论你导出什么函数,其它语言一样都可以调用的,只不过那个函数名就比较怪,会有一大堆修饰,例如可能是??AddNum@@QAE@XZ,只要是名字对了,都是可以调用的
1.除了要包含必须的头文件,关键是要选择正确的MFC运行库链接方式:Project->Setting->General->"Use MFC in a Shared DLL"。
2.这是一个自定义对象两种持久化方式比较的测试例子:
#include <afxwin.h> // MFC core and standard components//#include <afxext.h>// MFC extensions
//#include <afxdisp.h> // MFC Automation classes
//#include <afxdtctl.h> // MFC support for Internet Explorer 4 Common Controls
//#include <afxcmn.h> // MFC support for Windows Common Controls
class CMyClass : public CObject
{
DECLARE_SERIAL(CMyClass)
public:
CMyClass(){}
CMyClass(LPCTSTR lpszClassName){m_cString=lpszClassName}
~CMyClass(){}
void Dump(CDumpContext&dc) const
void Serialize(CArchive&ar)
CString m_cString
}
IMPLEMENT_SERIAL(CMyClass,CObject,0)
void CMyClass::Dump(CDumpContext&dc) const
{
if(m_cString.GetLength() >0)
{
dc <<(LPTSTR)(LPCTSTR)m_cString
dc <<_T("\r\n")
}
}
void CMyClass::Serialize(CArchive&ar)
{
TCHAR* ptc=(LPTSTR)(LPCTSTR)m_cString
for(int i=0i<m_cString.GetLength()i++)
{
ar <<ptc[i]
}
ar <<'\r'
ar <<'\n'
}
int main()
{
CMyClass* pobj = new CMyClass(_T("请把我持久化,谢谢!"))
CFile cfile1(_T("dump1.txt"),CFile::modeReadWrite|CFile::modeCreate)
CDumpContext cdc(&cfile1)
pobj->Dump(cdc)
CFile cfile2(_T("dump2.txt"),CFile::modeReadWrite|CFile::modeCreate)
CArchive ar(&cfile2,0)
pobj->Serialize(ar)
Sleep(2000)
return 0
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)