我是靠谱客的博主 开心牛排,最近开发中收集的这篇文章主要介绍vs2010 MFC DLL创建和调用,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

今天把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创建和调用所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(34)

评论列表共有 0 条评论

立即
投稿
返回
顶部