2012-01-19 15 views
1

変換しようとしている次のマクロがあります。C++でマクロを使用するために、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++で非常にグリーンです。誰かが私に手を差し伸べることができますか?

ありがとうございます!

答えて

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; 
} 

EDIT:以下

男は、私はあまりにも多くの変換を簡略化していたポイントを持っていました。実際の変換プロセスではなく、構造を示すことが私のポイントでした。

+0

これは、あたかも関数であるかのように文字通り翻訳されたときには機能しません。さらに、目標は明らかにポインタ演算によるメモリアドレスを取得することです。IIRCはこれを行うC言語の方法ではありません。マクロの使用法を理解し、マクロを使用してコードを書き直すことで、OPがうまくいくかもしれません。 –

+0

ありがとうございました! :)私はこれらのマクロでかなり読んできましたが、私が持っているものは私を投げています。私はPEDumpまたはDumpBinのC#バージョンを見つけようとしています。 DLL内にあります。 –

+0

GetFieldの翻訳が間違っています。マクロは、固定バイトオフセットを返すために使用されます。 'field'はMARCOの引数で、' IMAGE_FIRST_SECTION'マクロの場合、FIELD_OFFSETマクロの使用法を '(long)(sizeof DWORD)+ sizeof(IMAGE_FILE_HEADER)) ' – Manfre

関連する問題