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を取り込んでいるので普通にクラスが使える訳です。


戻る