VS2019导出DLL再调用成功,但头文件里的参数修改不生效

问题遇到的现象和发生背景

各位专家,本人对软件学的还不深。我在开发过程中遇到一个问题,我使用调试好的.h和.cpp生成DLL,并创建工程调用,里面的函数有调用OK的,但是.h里宏开关和变量再调用DLL的工程里修改不起效,怎么改都是生成DLL时的配置。

这是头文件中的内容:
#define CCTEST_API(T) T _declspec(dllexport)
#这是dllexport和dllimport,导出时使用dllexport, 调用时使用dllimport

/* define to print debug message */
//#define CC_DEBUG_LOG

打印调试信息的宏开关

#define CC_DEBUG_LOG_FULL

打印调试信息的宏开关

const uint8 device_NUM = 4;
const uint8 device_DAT = 2;
#变量定义,开放给客户修改
CCTEST_API(uint32) devicePortSwitchOn(uint16 device_index, uint32 device_sn, uint16 device_portmask);
#函数声明,具体定义在.cpp文件里

我在生成DLL时打开的是dllexport, 调用时用得是dllimport。函数devicePortSwitchOn使用都正常,就是修改变量device_NUM或者切换宏开关define CC_DEBUG_LOG不起效,感觉这个头文件里,除了函数之外其他的都不能修改生效。

我想要的结果是,头文件里的函数,变量和宏开关都可以在调用DLL的工程里调用和修改参数。感谢。

我新建了另一个工程验证了下,加入.h和.cpp,确认是可以调用函数和修改变量值还有宏开关,目前就是导出DLL再次调用的时候,变量和宏开关修改会不起效。谢谢各位先。

为了讲清楚我的问题,我分别新建了三个工程:
CCAPI_Define - 用来定义函数,并调试验证函数功能
CCDLL_GenerateMfcDll - 将验证好的工程生成DLL/LIB
CCTEST_CallMfcDLL - 调用DLL并验证

  1. CCAPI_Define中ADD APIDefine.cpp和APIDefine.h

APIDefine.h
#pragma once
#define CC_API(T) T _declspec(dllexport)
#define DATA_SUM //测试问题的宏开关
//#define DATA_DIF //测试问题的宏开关
CC_API(int) data_calculate(int num_1, int num_2); //测试函数
APIDefine.cpp
#include "pch.h"
#include "APIDefine.h"
CC_API(int) data_calculate(int num_1, int num_2)
{
int num_3 = 0;
#ifdef DATA_SUM
num_3 = num_1 + num_2; //DATA_SUM打开,两数求和
#endif
#ifdef DATA_DIF
num_3 = num_1 - num_2; //DATA_DIF打开,两数求差
#endif
return num_3;
}
在CCAPI_Define工程中验证,分别打开两个宏开关可以得出和和差,是想要的结果。
void CCCAPIDlg::OnBnClickedButton1()
{
// TODO: Add your control notification handler code here
CString str_buf;
int num_a = 8;
int num_b = 6;
int result = data_calculate(num_a, num_b);

str_buf.Format(_T("%d"), result);   
SetDlgItemText(IDC_EDIT1, str_buf);
Sleep(100);

}

img

img

  1. 创建MFC DLL 工程CCDLL_GenerateMfcDll, 导入APIDefine.cpp和APIDefine.h并成成DLL
  2. 创建CCTEST_CallMfcDLL,导入APIDefine.h, 调用DLL
    问题出现,当切换APIDefine.h中的#define DATA_SUM 和 #define DATA_DIF 宏开关时,函数内的求和和求差不会根据宏开关切换,发现在生成DLL时宏开关设置在哪里,调用DLL时宏开关切换后不生效。

我是初学者,不知道问题描述清除没有,哪位专家帮忙看下,不胜感激。

以下是在工程3 CCTEST_CallMfcDLL调用DLL时APIDefine.h中修改为dllimport
#pragma once
#define CC_API(T) T _declspec(dllimport)
#define DATA_SUM
//#define DATA_DIF
CC_API(int) data_calculate(int num_1, int num_2); //测试时变量设置 num_1 = 8, num_2 = 6

测试结果应该是14, 但现在2。

为什么我的问题没有专家给点意见呢?