如何转换或翻译C ++定义宏,以便我可以在C#中使用它们

时间:2012-01-19 20:41:48

标签: c#

我有以下我想要转换的宏。

#define FIELD_OFFSET(type, field)    ((LONG)&(((type *)0)->field))
#define IMAGE_FIRST_SECTION(ntheader) ((PIMAGE_SECTION_HEADER) ((DWORD)ntheader + \ 
FIELD_OFFSET( IMAGE_NT_HEADERS, OptionalHeader ) + \
((PIMAGE_NT_HEADERS)(ntheader))->FileHeader.SizeOfOptionalHeader))

我对C ++很绿。有人可以帮我一把吗?

提前致谢!

1 个答案:

答案 0 :(得分:2)

c# doesn't support macros.

只需将它们创建为函数即可。 c ++中宏的唯一真正的优势是你强制内联。 C#中的编译器足够智能,可以为您做出内联决策。

很难从你给我的例子中给你一个例子,主要是因为他们在c#中没有“理解”,但我会试着给你一个想法:

#define AddNumbers(x,y)    x+y

可以翻译成:

public Int32 AddNumbers( Int x, Int y )
{
    return x+y;
} 

编辑:

下面的人有一点我已经将转换简化为TOO了。我的观点更多的是展示结构,而不是实际的转换过程。