1
3
我有一个解决方案,你可能不认为非常“干净”,但这将工作。问题是,使用enum或define预处理器指令都会丢弃用于常量的符号名(比如ERR OUT OF MEMORY实际上只是一个整数)。 在C++代码中,可以定义一个函数,该函数取符号的字符串名称并返回其值。可以使用std::map,然后添加std::pair(“ERR\u OUT \u OF \u MEMORY”,ERR\u OUT \u OF \u MEMORY)之类的对,然后可以使用DllImportAttribute从DLL调用该函数,DllImportAttribute允许.NET中的非托管互操作。不幸的是,这需要遍历并字符串化常量,但好处是如果这些常量发生更改,它将是自动的。 另一种解决方案是编写一个简单的脚本,通过预处理器#定义并创建一个巨大的.NET类,其中包含一组同名的静态常量。考虑到预处理器的简单性(只需要几行Perl代码),这实际上并不难 |
2
3
您需要在C#包装器类的C#内部重新定义它们。 不幸的是,如果常量更改,您也需要修改您的副本(但是,在版本之间更改常量值是一个非常糟糕的主意,所以希望第三方API不会这样做……) 也就是说,这是有选择的。例如,您可以使用使用API的小型C++程序,并将所有常量写入到.cs文件中,格式正确。如果常量在不同版本之间发生变化(至少,如果值发生变化),这将保护您,但是如果需要,您仍然需要更新程序以在将来的版本中处理其他常量。
|
rookie · 检查函数模板的所有参数包参数是否属于int 1 年前 |
ivaigult · -W转换和隐式字符串到布尔类型转换 1 年前 |
rainer · 后台插入程序的初始化 1 年前 |
Community wiki · 以理智、安全和高效的方式复制文件 1 年前 |
Shefali Kanaujia · 对C中向量的向量进行排序++ 1 年前 |
Ma Joonyoung · 粗粒度和细粒度链表的时间比较 1 年前 |