首页 > 代码库 > Windows下动态库的编译以及调用
Windows下动态库的编译以及调用
1.MFC下生成动态库
1>显式调用
在.cpp文件里添加接口函数
1 int sum(int a,int b)2 {3 return a + b;4 }5 6 int sub(int a,int b)7 {8 return a - b;9 }
在.def文件里标示导出接口
1 sum @1; 2 sub @2;
编译即可生成动态库
在.exe里调用
在头文件里添加
1 #pragma comment(lib,"TestDLL")2 int sum(int a,int b);3 int sub(int a,int b);
1 public:2 void InitAll();3 CString decToStr(int dec);4 5 public:6 CString str1,str2;7 int a,b;
Button事件
1 void CTestDlgDlg::OnButtonAdd() 2 {3 // TODO: Add your control notification handler code here4 InitAll();5 int c = sum(a,b);6 CString sum1 = decToStr(c);7 SetDlgItemText(IDC_EDIT3,sum1);8 }
1 void CTestDlgDlg::OnButtonSub() 2 {3 // TODO: Add your control notification handler code here4 InitAll();5 int d = sub(a,b);6 CString Sub = decToStr(d);7 SetDlgItemText(IDC_EDIT4,Sub);8 }
1 void CTestDlgDlg::InitAll() 2 { 3 UpdateData(TRUE); 4 GetDlgItemText(IDC_EDIT1,str1); 5 GetDlgItemText(IDC_EDIT2,str2); 6 a = atoi(str1); 7 b = atoi(str2); 8 } 9 10 CString CTestDlgDlg::decToStr(int dec)11 {12 CString str;13 str.Format(_T("%d"),dec);14 return str;15 }
然后将相应的.dll和.lib拷贝到相应目录即可。
2>隐式调用
在头文件里添加
1 typedef int (*PFUNC)(int,int);
1 HMODULE hDllLib; 2 PFUNC m_pSum; 3 PFUNC m_pSub;
在BOOL CTestDlgDlg::OnInitDialog()里添加
1 hDllLib = LoadLibrary("TestDll.dll");2 if (hDllLib == NULL)3 {4 AfxMessageBox("dll load error");5 return FALSE;6 }7 m_pSum = (PFUNC)(GetProcAddress(hDllLib,"sum"));8 m_pSub = (PFUNC)(GetProcAddress(hDllLib,"sub"));
其他相应代码
1 void CTestDlgDlg::OnButtonAdd() 2 { 3 // TODO: Add your control notification handler code here 4 InitAll(); 5 int c= m_pSum(a,b); 6 CString sum1 = decToStr(c); 7 SetDlgItemText(IDC_EDIT3,sum1); 8 } 9 10 void CTestDlgDlg::OnButtonSub() 11 {12 // TODO: Add your control notification handler code here13 InitAll();14 int d = m_pSub(a,b);15 CString Sub = decToStr(d);16 SetDlgItemText(IDC_EDIT4,Sub);17 }18 19 void CTestDlgDlg::InitAll()20 {21 UpdateData(TRUE);22 GetDlgItemText(IDC_EDIT1,str1);23 GetDlgItemText(IDC_EDIT2,str2);24 a = atoi(str1);25 b = atoi(str2);26 }27 28 29 CString CTestDlgDlg::decToStr(int dec)30 {31 CString str;32 str.Format(_T("%d"),dec);33 return str;34 }
2.Win32下动态库生成及调用
动态库头文件里添加
1 extern "C" WIN32DLL_API int sum(int a,int b);2 extern "C" WIN3
2DLL_API int sub(int a,int b);
.cpp文件里添加
1 extern "C" WIN32DLL_API int sum(int a,int b)2 {3 return a + b;4 }5 6 extern "C" WIN32DLL_API int sub(int a,int b)7 {8 return a - b;9 }
编译即生成动态库
调用
在.exe头文件里添加
1 #pragma comment(lib,"Win32DLL")2 3 extern "C" int sum(int a,int b);4 extern "C" int sub(int a,int b);
其他相应文件
1 void CTestDlgDlg::OnButtonAdd() 2 { 3 // TODO: Add your control notification handler code here 4 InitAll(); 5 int c = sum(a,b); 6 CString sum1 = decToStr(c); 7 SetDlgItemText(IDC_EDIT3,sum1); 8 } 9 10 void CTestDlgDlg::OnButtonSub() 11 {12 // TODO: Add your control notification handler code here13 InitAll();14 int d = sub(a,b);15 CString Sub = decToStr(d);16 SetDlgItemText(IDC_EDIT4,Sub);17 }18 19 void CTestDlgDlg::InitAll()20 {21 UpdateData(TRUE);22 GetDlgItemText(IDC_EDIT1,str1);23 GetDlgItemText(IDC_EDIT2,str2);24 a = atoi(str1);25 b = atoi(str2);26 }27 28 29 CString CTestDlgDlg::decToStr(int dec)30 {31 CString str;32 str.Format(_T("%d"),dec);33 return str;34 }
以上代码通过测试!
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。