非MFC程序如何调用MFC扩展DLL之最简单方法

非MFC程序如何调用MFC扩展DLL之最简单方法,第1张

准确地说,如果你导出的是MFC的类,那这个导出类就真只能被MFC调用了

如果你是导出的是普通的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

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7957072.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-11
下一篇 2023-04-11

发表评论

登录后才能评论

评论列表(0条)

保存