完整的.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; }

转载于:https://www.cnblogs.com/marklove/p/11081095.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值