gpt4 book ai didi

c++ - 查找#define值dll

转载 作者:行者123 更新时间:2023-11-28 04:52:09 25 4
gpt4 key购买 nike

这可能是一个非常简单的问题,但由于我很长一段时间没有在严重的愤怒中使用 C++ 而变得非常困难 - 我的技能比 80 年代的菲亚特还生锈!

我有许多头文件将寄存器地址定义为已提供给我的#defines。

我想创建一个 .dll,它允许我通过它们的名称查找这些值,并从另一个开发环境将它们的值作为 unsigned long 返回,即

#define A_REGISTER_ADDRESS 0x40

unsigned long myLookupFunction( string lookup )
{
// return value of #define specified by lookup as unsigned long
}

在此先感谢您的帮助。

戴夫

最佳答案

您可以使用这样的技术。这使用宏生成器生成从字符串名称到值的 std::map 以及具有相同名称和值的枚举。

#include <map>
#include <iostream>
#include <string>

#define ADDRESS(apply) \
apply(PORT1,0x40UL) \
apply(PORT2,0x42UL) \
apply(PORT3,0x43UL)

#define CREATE_MAP(name,value) \
{#name,value},

std::map<std::string, unsigned long> myMap = {ADDRESS(CREATE_MAP)};

#define CREATE_ENUM(name, value) \
name = value,

enum RegisterAddresses
{
ADDRESS(CREATE_ENUM)
};


unsigned long myLookupFunction(std::string lookup)
{
return myMap[lookup];
}

int main()
{
std::cout << "port PORT1 value " << std::hex << myLookupFunction("PORT1") << "\n";
std::cout << "port PORT2 value " << std::hex << myLookupFunction("PORT2") << "\n";
std::cout << "port PORT3 value " << std::hex << myLookupFunction("PORT3") << "\n";
std::cout << "port PORT1 enum value " << std::hex << PORT1 << "\n";
}

关于c++ - 查找#define值dll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47940931/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com