gpt4 book ai didi

c# - 使相应的 native 和托管枚举保持同步的技术

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:25:30 25 4
gpt4 key购买 nike

我有一个 native 库的管理器包装器—— native 库是具有导出 C 接口(interface)的 C++,我在托管端使用 P/Invoke 来实现互操作。我可以控制托管代码和 native 代码。

native 代码中有一个枚举,在托管代码中有相应的枚举,如下所示:

// C#
public enum ErrorCode {
None = 0,
General = 1,
BadThings = 2,
HardDriveWasRemoved = 3,
}

// C++
enum ERROR_CODE {
ERROR_CODE_NONE = 0,
ERROR_CODE_GENERAL = 1,
ERROR_CODE_BAD_THINGS = 2,
ERROR_CODE_HARD_DRIVE_REMOVED = 3,
}

这些枚举需要保持同步,因为枚举值在托管代码和 native 代码之间来回传递;它们之间的不正确映射会导致微妙的故障,这些故障并不总是立即显而易见。

有没有人有任何聪明(但相对轻量级)的技术来 (a) 自动保持这些枚举同步,或 (b) 尽早提供警告/错误/失败以表明枚举不同步?

最佳答案

将它们放入一个单独的 C# 文件中,从 C++ 端#include。 #define 去掉所有的 C# 绒毛(比如最初的 public)。像这样:

#define public
#include "enums.cs"
#undef public

关于c# - 使相应的 native 和托管枚举保持同步的技术,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4901743/

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