• 完整的.h宏定义


    ##封装中的要点

    • __declspec(dllexport)

    表明函数为导出函数 * `extern "C"`

    导出的函数名与声明一致,否则导出函数名无法正常使用

    当然,也可以通过定义`.def`文件实现函数名正常 * `_stdcall`

    32位不能使用此声明

    linux不能使用此声明 * WIN32 & _WINDOWS * WIN32 编译32位C+时使用 * _WINDOWS 编译64位时使用




    #ifdef _WINDOWS //64位系统没有预定义 WIN32 #ifdef __cplusplus #define DLL_EXPORT_C_DECL extern "C" __declspec(dllexport) #else #define DLL_EXPORT_DECL __declspec(dllexport) #endif #else #ifdef __cplusplus #define DLL_EXPORT_C_DECL extern "C" #else #define DLL_EXPORT_DECL extern #endif #endif #ifdef _WINDOWS #define WINAPI __stdcall #define WIN32_LEAN_AND_MEAN //从 Windows 头文件中排除极少使用的信息 #include "stddef.h" #else #define WINAPI #endif
    x1
    >
    <
    >>
    <<
    O

    ##代码

     

    test.h

      
    #pragma once
    #define TEST_API extern "C" __declspec(dllexport)
    
    #define WINAPI   __stdcall    //32位不能声明为__stdcall,否则函数名乱码
    #define WIN32_LEAN_AND_MEAN             //  从 Windows 头文件中排除极少使用的信息
    #include "stddef.h"
    
    // 此类是从 Test.dll 导出的
    class CTest {
    public:
    	CTest(void);
    	// TODO:  在此添加您的方法。
    };
    

     

    test.cpp

    #include "stdafx.h"
    #include "Test.h"
    
    // 声明回调函数类型
    typedef int (WINAPI *FrontConnected)();
    
    // 回调函数变量
    void *_connect;
    
    // 利用set函数将上层的回调函数指针传递到C+层,并赋值给_connect
    TEST_API void WINAPI SetConnect(void* conn)
    {
        _connect = conn;
    }
    
    // C+层通过_connect调用上层的回调函数
    TEST_API int WINAPI fnTest(int a, int b)
    {
        if (_connect != NULL)
    	{
    		((FrontConnected)_connect)();
    	}
    	return a + b;
    }
    
    
    // 这是已导出类的构造函数。
    // 有关类定义的信息,请参阅 Test.h
    CTest::CTest()
    {
    	return;
    }
  • 相关阅读:
    hdu_2842_Chinese Rings(矩阵快速幂)
    hdu_3565_Bi-peak Number(数位DP)
    hdu_1536_S-Nim(DFS_SG博弈)
    hdu_1848_Fibonacci again and again(博弈sg函数)
    hdu_2147_kiki's game(博弈)
    hdu_2955_Robberies(01背包)
    hdu_5705_Clock("巴卡斯杯" 中国大学生程序设计竞赛
    [POJ2104]K-th Number
    【AHOI2014复仇】
    最长回文子串
  • 原文地址:https://www.cnblogs.com/marklove/p/11081095.html
Copyright © 2020-2023  润新知