LastUpdate: 2019/06/05 23:45:31
MFC DLLベースでプロジェクトを作成する。 プロジェクト名がディフォルトでdllファイル名やLIB名になる。外部公開クラスとは関係が無いので命名には意識しよう。
プロジェクトの生成後、外部公開用のクラスを作る。そこに、Export文を追加する。
ヘッダ
#if !defined(AFX_TEST_H__EE2DE662_6783_4E44_B12B_9BB4CF362D7D__INCLUDED_)
#define AFX_TEST_H__EE2DE662_6783_4E44_B12B_9BB4CF362D7D__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#ifdef DLL_EXPORTS
#define DLL_API __declspec(dllexport)
#else
#define DLL_API __declspec(dllimport)
#endif
#include <afxtempl.h>
class DLL_API CTest
{
public:
void testFunc(CArray<char*,char*>& arr);
CTest();
virtual ~CTest();
};
#endif // !defined(AFX_TEST_H__EE2DE662_6783_4E44_B12B_9BB4CF362D7D__INCLUDED_)
CPP
#include "stdafx.h"
#include "lib.h"
#define DLL_EXPORTS
#include "Test.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// 構築/消滅
//////////////////////////////////////////////////////////////////////
CTest::CTest()
{
}
CTest::~CTest()
{
}
void CTest::testFunc(CArray<char*,char*>& arr)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
AfxSetResourceHandle(AfxGetResourceHandle());
AfxMessageBox(arr.GetAt(0));
}
拡張DLLの際は、
AFX_MANAGE_STATE(AfxGetStaticModuleState());
AfxSetResourceHandle(AfxGetResourceHandle());
がいるらしい。 概念をさらに調査
使用するときは、通常のDLL関数の用に、LIBとDLL、ヘッダを取り込んで、もうクラスを普通に使用するだけ。Test.hを取り込んでいるので普通にクラスが使える訳です。