//filename : Dll1.h #ifndef _DLL1_H_ #define _DLL1_H_ #ifdef DLL1_API #else #define DLL1_API extern "C" _declspec(dllimport) #endif // DLL1_API DLL1_API int _stdcall add(int a,int b); DLL1_API int _stdcall substract(int a,int b); #endif
//filename:Dll1.cpp #define DLL1_API extern "C" _declspec(dllexport) #include "Dll1.h" int _stdcall add(int a,int b) { return a+b; } int _stdcall substract(int a,int b) { return a-b; }
//MyPoint.h // MyPoint.h: interface for the MyPoint class. // ////////////////////////////////////////////////////////////////////// #include <windows.h> #include <stdio.h> #if !defined(AFX_MYPOINT_H__0FB85FE1_A0BB_4FF3_B780_79E133776F44__INCLUDED_) #define AFX_MYPOINT_H__0FB85FE1_A0BB_4FF3_B780_79E133776F44__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #ifdef DLL2_API #else #define DLL2_API _declspec(dllimport) #endif // DLL2_API class DLL2_API MyPoint { public: void output(); MyPoint(); virtual ~MyPoint(); public: int y; int x; }; #endif // !defined(AFX_MYPOINT_H__0FB85FE1_A0BB_4FF3_B780_79E133776F44__INCLUDED_)
// MyPoint.cpp: implementation of the MyPoint class. // ////////////////////////////////////////////////////////////////////// #define DLL2_API _declspec(dllexport) #include "MyPoint.h" ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// MyPoint::MyPoint() { x=0; y=0; } MyPoint::~MyPoint() { } void MyPoint::output() { HWND hWnd = GetForegroundWindow(); HDC hdc = GetDC(hWnd); char buf[40]; memset(buf,0,40); sprintf(buf,"x=%d,y=%d",x,y); TextOut(hdc,0,0,buf,strlen(buf)); ReleaseDC(hWnd,hdc); }
Dll1.def
LIBRARY Dll1 EXPORTS add substract
void CDllTestDlg::OnBtnLoadLibrary() { HMODULE hModule = LoadLibrary("Dll1.dll"); if(!hModule) { MessageBox("未能加载DLL"); return; } typedef int (_stdcall *ADDPROC) (int,int); ADDPROC add=(ADDPROC) GetProcAddress(hModule,"substract"); if(!add){ MessageBox("未找到指定函数"); return; } int result=add(1,22); CString str; str.Format("%d",result); MessageBox(str); }