概述
今天把vs2010重新修复重装了,曾经所有崩溃现象基本上不存在,一直以为是AMD芯片拼不过wintel的原因,不过wintel开发软件放到其他PC上运行比AMD上编译出来的要稳定一些,曾今做了一个软件,在AMD上编译通过,到wintel上运行经常报错,结果查看错误报文,大致用english说不兼容AMD某个寄存器,所以立即改在wintel上编译,救过就OK了.
说了几句无关的话,只是太无聊了,所以聊一聊.
<1> : 创建DLL工程:选MFC Template,然后右侧选择MFC DLL项,点击OK
<2> : 一般的到这一步可以选择"Finish"
<3> : 如果上面点击"Next":
<4> : 进入开发界面,点开"Solution Explorer",打开"CMFCDLLDemo01.h",在头部声明:
extern "C" int PASCAL EXPORT Add(int a,int b);
extern "C" void PASCAL EXPORT COpenFile();
在这里我直接声明两个函数,并且打算将其导出.
<5> : 打开"CMFCDLLDemo01.cpp",添加函数体如下:
extern "C" int PASCAL EXPORT Add(int a,int b){
return (a+b);
}
extern "C" void PASCAL EXPORT COpenFile(){
CFileDialog dlgFile(TRUE);
CString fileName;
const int c_cMaxFiles = 100;
const int c_cbBuffSize = (c_cMaxFiles * (MAX_PATH + 1)) + 1;
dlgFile.GetOFN().lpstrFile = fileName.GetBuffer(c_cbBuffSize);
dlgFile.GetOFN().nMaxFile = c_cMaxFiles;
dlgFile.DoModal();
fileName.ReleaseBuffer();
}
<6> : 在"CMFCDLLDemo01.def"文件中添加导出函数名和库名:
LIBRARY "MFCDLLDemo"
EXPORTS
; Explicit exports can go here
Add @1
COpenFile
//在VC6.0需要自行用记事本输入上面内容并且保存为def扩展名文件,让工程->添加文件的方式导入该文件,vs2010这里事先已经添加好了.
<7> : build后生成对应的.dll和.lib文件;
<8> : 静态调用:适合外来导入的库文件不多的情况下,新建一个dialog工程后,菜单project->CMFCDLLDemo01 property:
添加编译好的lib路径进去.如果"MFCDLLDemo01.h"文件没有设置路径,就直接将其拷贝到工程目录下即可,给出这个文件是为了提供接口函数,方便其他程序员方便调用!
<9> : 添加一个按钮,然后添加相应消息:
#include "MFCDLLDemo01.h"
#pragma comment(lib,"MFCDLLDemo01.lib");
void CMFCTestDLLDlg::OnBnClickedButton1()
{
// TODO: Add your control notification handler code here
CString f;
int b;
b=Add(10,12);
f.Format(L"Add Value : %d",b);
MessageBox(f);
}
<10> : 动态调用:
void CMFCTestDLLDlg::OnBnClickedButton2()
{
// TODO: Add your control notification handler code here
UpdateData();
HINSTANCE hInstalib=LoadLibrary(L"MFCDLLDemo.dll");
typedef int (WINAPI *ADDPROC) (int a,int b);
if(hInstalib==NULL){
FreeLibrary(hInstalib);
}
ADDPROC Add=(ADDPROC)GetProcAddress(hInstalib,"Add");
if(!Add){
FreeLibrary(hInstalib);
}
CString s;
int f=0;
f=Add(10,12);
s.Format(L"Add Value : %d",f);
MessageBox(s);
FreeLibrary(hInstalib);
}
void CMFCTestDLLDlg::OnBnClickedButton3()
{
// TODO: Add your control notification handler code here
UpdateData();
HINSTANCE hInstalib=LoadLibrary(L"MFCDLLDemo.dll");
typedef void (WINAPI *ADDPROC)();
if(hInstalib==NULL){
FreeLibrary(hInstalib);
}
ADDPROC OpenF=(ADDPROC)GetProcAddress(hInstalib,"COpenFile");
if(!OpenF){
FreeLibrary(hInstalib);
}
OpenF();
FreeLibrary(hInstalib);
}
//程序中红色字体一定要标注(个别的教材会没标,但不知道为什么他们居然没问题),否则会获取函数地址失败,或者函数名"变味"了.
转载于:https://www.cnblogs.com/MMLoveMeMM/articles/3025311.html
最后
以上就是开心牛排为你收集整理的vs2010 MFC DLL创建和调用的全部内容,希望文章能够帮你解决vs2010 MFC DLL创建和调用所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复