zoukankan      html  css  js  c++  java
  • 第19讲——动态链接库

    1,建立一个win32的dll项目,编译。在vs的安装目录下的E:visual stdio 2015VCin执行vcvars32.bat,使得dumpbin.exe可用。使用dumpbin -exports ConsoleApplication1.dll可以查看动态链接库的导出函数。如果要导出函数,则在动态链接库的函数名前要加_declspec(dllexport),如_declspec(dllexport) int add(int a, int b)

    2,在要调用动态链接库的工程里 先声明 extern int add(int a, int b);然后再使用,并且在工程中要加入动态链接库生成的ConsoleApplication1.dll 和ConsoleApplication1.lib。 _declspec(dllexport)标识符声明的函数效率更高,相对于用extern

    3,可以用dependency walker查看动态链接库中导出的函数

    4,如果动态链接库项目中源程序自己要使用动态链接库函数,则在动态链接库头文件中使用预编译宏

    #ifdef DLL1_API
    #else
    #define DLL1_API _declspec(dllexport)
    #endif // DLL1_API

    动态链接库源文件中使用

    #define DLL1_API _declspec(dllexport)
    #include "dll1.h"

    5,自己搜MSDN时找到的一种在各种字符串类型之间进行转换的方法  https://msdn.microsoft.com/zh-cn/library/ms235631(v=VS.100).aspx

    如char 和wchar_t之间的转换

    char *orig = "Hello, World!";
    size_t newsize = strlen(orig) + 1;
    wchar_t * wcstring = new wchar_t[newsize];
    size_t convertedChars = 0;
    mbstowcs_s(&convertedChars, wcstring, newsize, orig, _TRUNCATE);

    6,在MFC中可以调用GetForegroundWindow(),返回指向前台窗口(使用用户当前)的窗口。

    7,为了防止在不同的编译器中以及C++编写的动态链接库能被用c写的程序调用,则在导出函数前要加extern “C” 如#define DLL1_API extern "C" _declspec(dllexport)

    8,如果导出函数的调用约定使用了标准调用约定_stdcall 可以通过模块定义文件的方式来解决名字改编的问题。模块定义文件的后缀名是.def,模块定义文件可以按如下所示写:

    LIBRARY DLL2

    EXPORTS
    add
    subtract

    9,对动态链接库的使用可以有隐式连接(通过头文件和加入链接库.lib),和动态加载(LoadLibrary函数,GetProcAddress函数获取导出函数的地址)。如:

    HINSTANCE hinst;
    hinst = LoadLibrary(_T("DLL2.dll"));
    typedef int(*addProc)(int a, int b);
    addProc pdd = (addProc)GetProcAddress(hinst, "add");

    10,MAKEINTRESOURCE()宏,可以将动态链接库序号转化为字符串

    11, DLLMain动态链接库入口函数

    12,在不需要动态链接库的时候,可以用FreeLibrary();

    
    
  • 相关阅读:
    【HANA系列】SAP HANA LEFT/RIGHT字符串截取
    【HANA系列】SAP HANA SQL REPLACE替换字符串
    【HANA系列】SAP HANA SQL获取某字符串的位置
    【HANA系列】SAP HANA SQL获取字符串长度
    【HANA系列】SAP HANA SQL从给定日期中获取月份
    【HANA系列】SAP HANA SQL从给定日期中获取分钟
    【HANA系列】SAP HANA SQL查找字符串位置
    【HANA系列】SAP HANA SQL截取字符串
    【HANA系列】SAP HANA SQL获取时间中的小时
    【HANA系列】SAP HANA SQL从给定日期中获取年份
  • 原文地址:https://www.cnblogs.com/wen-ge/p/5538961.html
Copyright © 2011-2022 走看看