• DLL中导出ANSI和UNICODE函数


    模仿window中的DLL导出ANSI和UNICODE版本的函数,使用UNICODE宏来控制使用哪个版本;

    在函数实际的执行代码UNICODE版本中,在ANSI函数的版本中只做参数的转换,及ANSI字符串转UNICODE字符串,然后调用UNICODE版本的函数。 

     0、DLL头文件
    #include <Windows.h>
    
    #ifndef _ICAL_H_
    #define _ICAL_H_
    
    #ifdef  DLL_EXPORT_IMP
        #define DLL_EXPORT  extern "C" __declspec(dllexport)
    #else
        #define DLL_EXPORT  extern "C" __declspec(dllimport)
    #endif
    
    DLL_EXPORT int Add(int a, int b);
    DLL_EXPORT void ShowA(LPCSTR lpStr);
    DLL_EXPORT void ShowW(LPCWSTR lpStr);
    
    #ifdef _UNICODE
        #define  Show ShowW
    #else    
        #define  Show ShowA
    #endif
     
    
    #endif
     1、DLL导出函数的实现
    #include "stdafx.h"
    
    #define   DLL_EXPORT_IMP 
    #include "ICal.h" 
    #include <iostream>
    
    
    int Add(int a, int b)
    {
        return 0;
    }
    
    
    
    void ShowW( LPCWSTR lpStr )
    {
        std::wcout << lpStr << std::endl;
    }
    
     
    
    void ShowA( LPCSTR lpStr )
    {
        if (! lpStr)
            return;
         
        int nCntOfChs = MultiByteToWideChar(CP_ACP, 0, lpStr,-1, NULL, 0);
        LPWSTR lpwStr = new WCHAR[nCntOfChs]();
        if (! lpwStr)
            return;
    
        nCntOfChs = MultiByteToWideChar(CP_ACP, 0, lpStr, -1, lpwStr, nCntOfChs);
        ShowW(lpwStr);
        delete[] lpwStr;
        lpwStr = NULL;
    }
     

      

     2、使用DLL中的导出函数
        Show(TEXT("hello T world"));
        ShowA("hello A world");
        ShowW(L"hello W world");

      

      

  • 相关阅读:
    HashMap Hashtable LinkedHashMap 和TreeMap
    RestTemplate -springwebclient
    IntelliJ IDEA 12:
    mac安装RabbitMQ
    mysql 常用,使用经验
    消息中间件性能究竟哪家强?
    log4j2配置文件log4j2.xml
    内存增长 避免
    nginx 服务器重启命令,关闭
    jquery获取css color 值返回RGB
  • 原文地址:https://www.cnblogs.com/cuish/p/4509638.html
Copyright © 2020-2023  润新知