Programming/Windows/VC++.NETで外部DLLの作り方

http://dexlab.net/pukiwiki/index.php?Programming%2FWindows%2FVC%2B%2B.NET%A4%C7%B3%B0%C9%F4DLL%A4%CE%BA%EE%A4%EA%CA%FD
 

VC++.NETで外部DLLの作り方

説明

C++で作成したDLLをVBや他言語から呼び出す時の決まり事

  • __declspec(dllexport)宣言を付ける
  • スタックの使い方はWINAPIを使用(呼び出し元ソフトによって変える)
  • C++の場合はextern "C" を付ける
  • DEFファイルをプロジェクト内に追加し、リンカオプションでファイル名を指定する

特に、DEFファイルを指定しないと、エクスポートされる関数名が「TestFunc?」になって欲しい所が、「_TestFunc?@」という用に修飾されてしまいます。 必ず指定しましょう。

dllmain.h

#ifndef __DllMain_h__
#define __DllMain_h__

#define DllExport __declspec(dllexport)

#ifdef __cplusplus
extern "C" {
#endif

// エクスポートする関数
DllExport void WINAPI TestFunc(const char* Input, char* Output);
typedef void (*LPTESTFUNC)(const char* Input, char* Output);

#ifdef __cplusplus
}
#endif

#endif	// __DllMain_h__

dllmain.cpp

#include "stdafx.h"
#include "dllmain.h"

// DllMain (固定)
BOOL APIENTRY DllMain( HANDLE hModule, 
                        DWORD ul_reason_for_call, 
                        LPVOID lpReserved )
{
	switch( ul_reason_for_call) {
 		case DLL_PROCESS_ATTACH:
			break;
		case DLL_THREAD_ATTACH:
			break;
		case DLL_THREAD_DETACH:
			break;
	    case DLL_PROCESS_DETACH:
			break;
	}
	return TRUE;
}

DllExport void WINAPI TestFunc(const char* Input, char* Output)
{
	// 処理
}

TestDll?.def

(Test.dllを作成したい場合、LIBRARY指定で".dll"は必要ないようです。)

LIBRARY 	"Test"
DESCRIPTION	"DLLの説明文"
EXPORTS
	TestFunc

DEFファイルの指定

(上で作成したDEFファイルを指定する)
def.png


添付ファイル: filedef.png 4366件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2009-04-05 (日) 21:36:47 (3363d)