天天看點

C++ DLL 模闆 .

 C++ DLL 模闆

1、使用VS2005建立Win32 DLL項目,選擇空項目,然後加入CppDll.h和CppDll.cpp檔案。

2、修改CppDll.h和CppDll.cpp檔案使之成為需要的内容。

3、編譯生成CppDll.dll。

下面是模闆檔案:

//   

// CppDll.h   

// by cheungmine   

// C++ DLL 模闆   

/*** 使用CPPDLL: 

#include "../CppDll.h" 

#ifdef _DEBUG 

#  pragma comment(lib, "F:/del/CppDll/Debug/CppDlld.lib") 

#else 

#  pragma comment(lib, "F:/del/CppDll/Release/CppDll.lib") 

#endif 

***/  

#ifndef _CPPDLL_H__   

#define _CPPDLL_H__   

//#include <windows.h>   

//#include <math.h>   

//#include <assert.h>   

//#include <memory.h>   

//#include <malloc.h>   

// 下列 ifdef 塊是建立使從 DLL 導出更簡單的宏的标準方法。   

// 此 DLL 中的所有檔案都是用指令行上定義的 CPPDLL_EXPORTS 符号編譯的。   

// 在使用此 DLL 的任何其他項目上不應定義此符号。   

// 這樣,源檔案中包含此檔案的任何其他項目都會将 CPPDLL_API 函數視為是從此 DLL 導入的,   

// 而此 DLL 則将用此宏定義的符号視為是被導出的。   

#ifdef CPPDLL_EXPORTS   

#define CPPDLL_API __declspec(dllexport)   

#else   

#define CPPDLL_API __declspec(dllimport)   

#endif   

#define     CPPDLL_VERSION   1.0            // 常量定義   

// 名稱空間   

namespace CppDll  

{  

// 從 CppDll.dll 導出類   

// 導出類: MyStruct   

struct CPPDLL_API MyStruct  

    long    x;  

    long    y;  

};  

// 導出類: MyClass2   

class CPPDLL_API MyClass2  

    void Clear()  

    {  

        // 實作   

    };  

public:  

    MyClass2();  

    ~MyClass2();  

// 導出共享變量   

extern CPPDLL_API int g_nVar;  

// 導出方法   

CPPDLL_API double Method(const MyStruct *s1, const MyStruct *s2);  

CPPDLL_API double Method(const MyStruct &s1, const MyStruct &s2);  

};   // End of namespace CppDll   

#endif  // _CPPDLL_H__  

//

// CppDll.h

// by cheungmine

// C++ DLL 模闆

/*** 使用CPPDLL:

#include "../CppDll.h"

#ifdef _DEBUG

# pragma comment(lib, "F:/del/CppDll/Debug/CppDlld.lib")

#else

# pragma comment(lib, "F:/del/CppDll/Release/CppDll.lib")

#endif

***/

#ifndef _CPPDLL_H__

#define _CPPDLL_H__

//#include <windows.h>

//#include <math.h>

//#include <assert.h>

//#include <memory.h>

//#include <malloc.h>

// 下列 ifdef 塊是建立使從 DLL 導出更簡單的宏的标準方法。

// 此 DLL 中的所有檔案都是用指令行上定義的 CPPDLL_EXPORTS 符号編譯的。

// 在使用此 DLL 的任何其他項目上不應定義此符号。

// 這樣,源檔案中包含此檔案的任何其他項目都會将 CPPDLL_API 函數視為是從此 DLL 導入的,

// 而此 DLL 則将用此宏定義的符号視為是被導出的。

#ifdef CPPDLL_EXPORTS

#define CPPDLL_API __declspec(dllexport)

#define CPPDLL_API __declspec(dllimport)

#define CPPDLL_VERSION 1.0 // 常量定義

// 名稱空間

namespace CppDll

{

// 從 CppDll.dll 導出類

// 導出類: MyStruct

struct CPPDLL_API MyStruct

long x;

long y;

};

// 導出類: MyClass2

class CPPDLL_API MyClass2

void Clear()

// 實作

public:

MyClass2();

~MyClass2();

// 導出共享變量

extern CPPDLL_API int g_nVar;

// 導出方法

CPPDLL_API double Method(const MyStruct *s1, const MyStruct *s2);

CPPDLL_API double Method(const MyStruct &s1, const MyStruct &s2);

}; // End of namespace CppDll

#endif // _CPPDLL_H__

// CppDll.cpp   

#include "CppDll.h"   

// 包含其他必要檔案   

// #include <vector>   

using namespace CppDll;  

///////////////////////////////////////////////////////////////////////////////   

// struct MyStruct   

// class MyClass2   

MyClass2::MyClass2()  

}  

MyClass2::~MyClass2()  

// 導出變量   

CPPDLL_API int g_nVar = 0;  

CPPDLL_API double CppDll::Method(const MyStruct *s1, const MyStruct *s2)  

    return 0;  

CPPDLL_API double CppDll::Method(const MyStruct &s1, const MyStruct &s2)  

// CppDll.cpp

#include "CppDll.h"

// 包含其他必要檔案

// #include <vector>

using namespace CppDll;

///////////////////////////////////////////////////////////////////////////////

// struct MyStruct

// class MyClass2

MyClass2::MyClass2()

}

MyClass2::~MyClass2()

// 導出變量

CPPDLL_API int g_nVar = 0;

CPPDLL_API double CppDll::Method(const MyStruct *s1, const MyStruct *s2)

return 0;

CPPDLL_API double CppDll::Method(const MyStruct &s1, const MyStruct &s2)

繼續閱讀