ダイナミックリンクライブラリDLL
VCで作成するDLLおよび呼び出し+DLLからC++クラス1をエクスポートする.空のダイナミックリンクライブラリプロジェクトを作成する:Win 32 Dynamic-Link Library 2.Dll 1を追加します.h、コードは:
Dll 1を追加します.cpp、コード:
コンパイル後にDll 1を得る.dll,Dll1.lib 3.名前の改編問題の解決:Dll 1を追加します.defファイル、コードは以下の通りです.
効果図:4.暗黙リンク:Dllを呼び出すと、まずDll 1が呼び出されます.hDll1.dll,Dll1.libは、D:Program FilesMicrosoft Visual StudioMyProjectsDllTestのようなプロジェクトのルートディレクトリの下に配置し、プロジェクト設定、Dll 1を追加します.libファイル、例えば図:ヘッダファイルの追加:
リンクを表示:
動的ロード方式でdllを使用する場合、アクセスが必要な場合、LoadLibary関数を呼び出してdllをロードします.このdllにアクセスする必要がなくなると、FreeLibrary関数を呼び出してdllへの参照を解放する.
#ifdef DLL1_API
#else
#define DLL1_API _declspec(dllimport)
#endif
DLL1_API int add(int a,int b);
class DLL1_API Point
{
public:
Point();
~Point();
void output(int x,int y);
protected:
private:
};
Point::Point()
{
}
Point::~Point()
{
}
Dll 1を追加します.cpp、コード:
#include <WINDOWS.H>
#include <STDIO.H>
#define DLL1_API _declspec(dllexport) // , ,
#include "Dll1.h"
int add(int a,int b)
{
return a + b;
}
void Point::output(int x,int y)
{
//
HWND hwnd = GetForegroundWindow();
// DC
HDC hdc = GetDC(hwnd);
char buf[20];
memset(buf,0,20);
sprintf(buf,"x = %d,y = %d",x,y);
//
TextOut(hdc,0,0,buf,strlen(buf));
// DC
ReleaseDC(hwnd,hdc);
}
コンパイル後にDll 1を得る.dll,Dll1.lib 3.名前の改編問題の解決:Dll 1を追加します.defファイル、コードは以下の通りです.
LIBRARY Dll1
EXPORTS
add
output
効果図:4.暗黙リンク:Dllを呼び出すと、まずDll 1が呼び出されます.hDll1.dll,Dll1.libは、D:Program FilesMicrosoft Visual StudioMyProjectsDllTestのようなプロジェクトのルートディレクトリの下に配置し、プロジェクト設定、Dll 1を追加します.libファイル、例えば図:ヘッダファイルの追加:
#include "Dll1.h"
呼び出しコード:void CDllTestDlg::OnBtnAdd()
{
// TODO: Add your control notification handler code here
CString str;
str.Format("5 + 3 = %d",add(5,3));
MessageBox(str);
Point pt;
pt.output(5,3);
}
リンクを表示:
void CDllTestDlg::OnBtnAdd()
{
// TODO: Add your control notification handler code here
//
// Point pt;
// pt.output(5,3);
HINSTANCE hInst;
hInst = LoadLibrary("Dll1.dll");
typedef int (_stdcall *ADDRPROC) (int a,int b); //_stdcall
ADDRPROC Add = (ADDRPROC)GetProcAddress(hInst,MAKEINTRESOURCE(4));
if(!Add)
{
MessageBox(" !");
return;
}
CString str;
str.Format("5 + 3 = %d",Add(5,3));
MessageBox(str);
}
動的ロード方式でdllを使用する場合、アクセスが必要な場合、LoadLibary関数を呼び出してdllをロードします.このdllにアクセスする必要がなくなると、FreeLibrary関数を呼び出してdllへの参照を解放する.