zoukankan      html  css  js  c++  java
  • 看"C++动态链接库编程深入浅出"的一些笔录

    来自于百度文库http://wenku.baidu.com/view/2ab4b3c5bb4cf7ec4afed08c.html?from_page=view&from_mod=download

    这篇文章我已下载,想要的朋友要联系我。

    DLL的目的是共享代码,而我想做的,把要花很多精力实现的功能封装成DLL,方便自己,如果能方便别人,最好不过了。

    1、为了头文件不被多次包含,用ifndef define endif形式,而不要用pragma once形式。

    2、头文件是两面性的,在DLL项目里,他所声明的函数都是extern "C" _declspec(dllexport)的,而当头文件被包含在调用者项目的时候,他所声明的函数是extern "C" _declspec(dllimport)的。为了让头文件具有两面性,用宏控制,例子如下:

    #ifndef _TESTDLL_H_H
    #define _TESTDLL_H_H
    #endif
    
    #ifdef TEST1_EXPORTS
    #define FUNPORT extern "C" _declspec(dllexport)
    #else    
    #define FUNPORT extern "C" _declspec(dllimport)
    #endif
    
    FUNPORT    int Fun_Add( int, int );

    在这里要注意了,TEST1_EXPORTS宏定义在DLL的项目属性页//C/C++//预处理器//预处理器定义,里定义。

    3、DLL项目里的编译链接成功后,会生成LIB和DLL文件。如果这个时候,把LIB删掉,代码没改动下,重新生成,LIB是不会重新生成的。

    4、为了支持DLL项目里能断点调试,DLL项目里的LIB、DLL和调用者所使用的LIB、DLL必须完全相同(有时按网上的说法正确设置也不能断点调试),否则在运行的时候,断点处提示"当前不会命中断点,还没有为该文档加载任何符号"。为了解决这问题,可以<清除>再<重新生成>LIB和DLL,之后复制LIB和DLL到调用者项目里,调用者项目也要<清除>再<重新生成>EXE。

  • 相关阅读:
    ddos(分布式拒绝服务)攻击防御措施
    arp_announce和arp_ignore 详细解说
    TCP三次握手和四次挥手
    ARP请求详解
    LVS/DR模式原理剖析(FAQs)
    nfs配置 /etc/exports
    LVS集群之十种调度算法及负载均衡-理论
    SSH 故障排查思路
    shell脚本基础和编写规范
    计算机操作系统概述
  • 原文地址:https://www.cnblogs.com/gdxmagic/p/3337136.html
Copyright © 2011-2022 走看看