zoukankan      html  css  js  c++  java
  • 入职第一天

    职位的一个大致工作内容安排如下:

    windows - 接口开发

    · dll封装与函数调用
    · PKI公钥加密
    · MFC
    · C/C++编程

    经理给介绍了老员工以后带我见了高工,高工给指导了一下后续要开展的任务和自己需要学习的东西。

    上来就遇到了DLL编译问题,报错如下:“VS 2010下 打开实例 出现这样的错误:
    LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏”

    解决方案:

    fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
    项目属性配置属性清单工具输入和输出嵌入清单:原来是“是”,改成“否”。

    动态链接库与静态链接库的区别(转载)

    静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib 中的指令都全部被直接包含在最终生成的 EXE 文件中了。但是若使用 DLL,该 DLL 不必被包含在最终 EXE 文件中,EXE 文件执行时可以“动态”地引用和卸载这个与 EXE 独立的 DLL 文件。静态链接库和动态链接库的另外一个区别在于静态链接库中不能再包含其他的动态链接库或者静态库,而在动态链接库中还可以再包含其他的动态或静态链接 库。静态链接库与静态链接库调用规则总体比较如下。

    对于静态链接库(比较简单):
    首先,静态链接库的使用需要库的开发者提供生成库的.h头文件和.lib文件。

    生成库的.h头文件中的声明格式如下:
    extern "C" 函数返回类型 函数名(参数表);
    在调用程序的.cpp源代码文件中如下:
    #include "..lib.h"
    #pragma comment(lib,"..\debug\libTest.lib")
    //指定与静态库一起链接

    第二,因为静态链接库是将全部指令都包含入调用程序生成的EXE文件中。因此如果用的是静态链接库,那么也就不存在“导出某个函数提供给用户使用”的情况,要想用就得全要!要不就都别要!:)

    对于动态链接库:
    动态链接库的使用需要库的开发者提供生成的.lib文件和.dll文件。或者只提供dll文件。
    首先我们必须先注意到DLL内的函数分为两种:
    (1)DLL 导出函数,可供应用程序调用;
    (2)DLL 内部函数,只能在 DLL 程序使用,应用程序无法调用它们。
    因此调用程序若想调用DLL中的某个函数就要以某种形式或方式指明它到底想调用哪一个函数。

    因此这里衍生出两个问题:
    第一:如何调用?即调用的方式
    第二:不同调用方式对应的库的生成过程和调用规则

    我逐步展开问题。
    第一,存在两种调用方式——动态调用和静态调用
    第二,两种调用方式的库的生成过程和调用规则
    1〉动态调用

    生成库的.h头文件中的声明格式如下:
    extern "C" 函数返回类型 __declspec(dllexport) 函数名(参数表);
    在调用程序的.cpp源代码文件中按如下流程调用:
    在main函数代码的开始处
    定义需要的DLL模块的句柄和此DLL模块模块中需要调用的函数的函数指针。
    定义好后紧接着就是标准的三部曲:
    取得需要的DLL模块------>返回模块句柄
    LoadLibrary("DLL模块路径")
    取得需要的函数地址———>返回函数指针GetProcAddress(模块句柄,"函数名")
    从内存中卸载DLL模块———>FreeLibrary(模块句柄)
    2>静态调用
    在调用程序的.cpp源代码文件中按如下流程调用:
    #include.........
    告诉编译器与 DLL 相对应的.lib 文件所在的路径及文件名
    #pragma comment(lib,"路径和文件名")
    extern "C" 函数返回类型 _declspec(dllimport) 函数名(参数表)分号
    int main()
    {
    ..............
    }
     
     
     
    oops。。。最后旁边的施工(程师)跟我说我们部门主要用C进行底层动态库的编写,先学习下如何用C写dll吧
  • 相关阅读:
    android 多线程
    Uva 10881 Piotr’s Ants 蚂蚁
    LA 3708 Graveyard 墓地雕塑 NEERC 2006
    UVa 11300 Spreading the Wealth 分金币
    UVa 11729 Commando War 突击战
    UVa 11292 The Dragon of Loowater 勇者斗恶龙
    HDU 4162 Shape Number
    HDU 1869 六度分离
    HDU 1041 Computer Transformation
    利用可变参数函数清空多个数组
  • 原文地址:https://www.cnblogs.com/zhangxiaosong/p/3227452.html
Copyright © 2011-2022 走看看