如何编写DLL实例,很早以前的笔记

在mingw中编写DLL程序
 * 用C++编写DLL程序

用例子来说明

dll.h

#ifndef _DLL_H_
#define _DLL_H_

#if BUILDING_DLL
# define DLLIMPORT __declspec (dllexport)
#else /* Not BUILDING_DLL */
# define DLLIMPORT __declspec (dllimport)
#endif /* Not BUILDING_DLL */


class DLLIMPORT DllClass
{
  public:
    DllClass();
    virtual ~DllClass(void);
    
    void setValue(int);
    int getValue() const;
  private:
    int _value;
};
#endif /* _DLL_H_ */

dllain.cpp

/* Replace "dll.h" with the name of your header */
#include "dll.h"
#include <iostream>
#include <windows.h>

DllClass::DllClass()
{
  std::cout << "Dll class construction" << std::endl;
}


DllClass::~DllClass ()
{
  std::cout << "Dll class destruction" << std::endl;
}

void DllClass::setValue(int n){
  _value=n;
}
int DllClass::getValue() const{
  return _value;
}
BOOL APIENTRY DllMain (HINSTANCE hInst     /* Library instance handle. */ ,
                       DWORD reason        /* Reason this function is being called. */ ,
                       LPVOID reserved     /* Not used. */ )
{
    switch (reason)
    {
      case DLL_PROCESS_ATTACH:
        break;

      case DLL_PROCESS_DETACH:
        break;

      case DLL_THREAD_ATTACH:
        break;

      case DLL_THREAD_DETACH:
        break;
    }

    /* Returns TRUE on success, FALSE on failure */
    return TRUE;
}

调用方法

main.cpp

#include "dll.h"
#include <iostream>
using namespace std;
int main(int argc, char *argv[]){
	DllClass dc;
	dc.setValue(100);
	cout << "involved: "<<dc.getValue() << endl;
	return 0;
}

编译DLL源文件
g++.exe -c dllmain.cpp -o dllmain.o -DBUILDING_DLL=1   -g3
连接DLL源文件,并输出描述DLL的def文件和.a文件.
dllwrap.exe --output-def libdlltest.def \
            --driver-name c++ \
            --implib libdlltest.a dllmain.o \
            --no-export-all-symbols \
            --add-stdcall-alias \
            -lgmon \
            -g3 \
            -o dlltest.dll

关于DLL加载的方式有3种.

1. 隐式, 就象使用静态库一样.
2. 显式, 用LoadLibrary/FreeLibrary方法来加载DLL程序.
3. 延迟方式, 很类似隐式,但是就并不是在程序开始运行的时候加载DLL.具体还要找更多的文档资料.



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值