欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

DLL

程序员文章站 2022-06-24 21:56:45
...

新建工程,选Win32 Dynamic-Link Library,工程名为dll例子,然后选A DLL that exports some symbols,完成.

工程已经有了一个类CDll,一个变量nDll和一个函数fnDll.

在类CDll中添加例子函数f.

在dll例子.h中添加

#ifdef __cplusplus
extern "C" {
#endif

#ifdef __cplusplus
}
#endif

以下是dll例子.h的代码:

//手动添加
#ifdef __cplusplus    // If used by C++ code, 
extern "C" {          // we need to export the C interface
#endif

#ifdef DLL_EXPORTS
#define DLL_API __declspec(dllexport)
#else
#define DLL_API __declspec(dllimport)
#endif

// This class is exported from the dll例子.dll
class DLL_API CDll {
public:
	CDll(void);
	// TODO: add your methods here.
	int f();
};

extern DLL_API int nDll;

DLL_API int fnDll(void);

//手动添加
#ifdef __cplusplus
}
#endif

  以下是dll例子.cpp的代码:

#include "stdafx.h"
#include "dll例子.h"

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


// This is an example of an exported variable
DLL_API int nDll=0;

// This is an example of an exported function.
DLL_API int fnDll(void)
{
	return 42;
}

// This is the constructor of a class that has been exported.
// see dll例子.h for the class definition
CDll::CDll()
{ 
	return; 
}

int CDll::f()
{
	return 1;
}

  下面演示静态链接:

新建win32控制台应用程序,选择支持MFC.

将dll例子.h, .dll和.lib拷入工程文件夹中.程序内容如下:

#include "stdafx.h"
#include "隐式链接.h"
#include "dll例子.h" //包括头文件
#pragma comment(lib, "dll例子.lib") //链接lib库

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// The one and only application object

CWinApp theApp;

using namespace std;

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
    cout<<nDll<<endl;
    cout<<fnDll()<<endl;
    CDll c;
    cout<<c.f()<<endl;
    return 0;
}

下面演示动态链接:

新建win32控制台应用程序,选择支持MFC.

程序内容如下:

#include "stdafx.h"
#include "显式链接.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// The one and only application object

CWinApp theApp;

using namespace std;

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
    HINSTANCE hDLL;
    hDLL = AfxLoadLibrary("dll例子.dll");

    int* p = (int*)GetProcAddress(hDLL,"nDll");
    cout<<*p<<endl;

    typedef int (* dllfunc)(void);
    dllfunc pF = (dllfunc)::GetProcAddress(hDLL, "fnDll");
    cout<<pF()<<endl;

    return 0;
}

怎么导出类不知道,如果你知道的话,请告诉我.