MFC dll
说说这两天的郁闷之事!
最初是想给UE4写插件,后来说先学学写插件吧,也搞不懂插件是啥,就说先写一个DLL吧!
坑爹的是导出函数可以调用成功,但是如果向导出函数中传值就会出现错误。
最最坑爹的是导出函数可以向调用它的程序传值,可偏偏不能传CString类型的……
网上查了好多坑爹的办法哦。。。到如今也没能实现。。。他妹的
真狗血,本以为半天都用不了就能够搞定的事情 现在已经折腾快两天了…………
唉!
后来发现是这样的:
这两行代码 不太明白是什么意思,但第一句是错的,第二句是正确的,必须加WINAPI
这样就能正确的传递参数了!
并且也可以返回CString类型的变量。。。。原来如此!
感谢感谢http://blog.csdn.net/dybinx/article/details/7709822 博主!
现在贴一下代码吧,哈哈!
dll 代码:
由于之前用MFC标准dll没能成功,后来有人说标准MFC不能返回CString 类型,然后就用扩展的MFC dll
所以下面使用的是扩展MFC DLL
首先新建一个类:

#pragma once class openFi { public: openFi(); CString showTime(); int __declspec(dllexport) add(int a); ~openFi(); };
#include "stdafx.h" #include "openFi.h" openFi::openFi() { } CString openFi::showTime() { CFileDialog openFile(TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, _T("文本文件|*.txt||"), NULL); if (openFile.DoModal() == IDOK) { return openFile.GetPathName(); } } int openFi::add(int a) { return 2*a; } openFi::~openFi() { }
.def文件 ; mySelf.def : 声明 DLL 的模块参数。 LIBRARY EXPORTS ; 此处可以是显式导出 showTime @1 add @2
切记 在此 注释和代码不能在一行
然后必须EXPORTS 下面写上将要在外部调用的代码
这样 DLL 文件就完成了 生成 一下就行!
下面看一下主MFC 窗体的代码

void CUseDllDlg::OnBnClickedOk() { // TODO: 在此添加控件通知处理程序代码 HINSTANCE hdll = LoadLibrary(_T("\mySelf.dll")); typedef CString(WINAPI *getPath)(); //必须添加 WINAPI typedef int(WINAPI *qiuhe)(int a); qiuhe add; add = (qiuhe)GetProcAddress(hdll, "add"); int c = 2; int aa = add(c); getPath getFilePath; getFilePath = (getPath)GetProcAddress(hdll, "showTime"); CString str; str = getFilePath(); }
注意 必须添加 WINAPI
好了 就这样吧!
今天又测试过程中发现了一个问题,DLL实际上是区分32位和64位的,这个要与主程序对应,否则就会出错。娘娘的,真蛋疼,后续还有好多东西要学……乎,,加油!
常规的MFC DLL 在接口中导出窗体失败,改成扩展MFC DLL后 就好了!