属性:DLLIMPORTはPreserverSigとSetLastErrorは、私は2つの属性に対して以下のような記述を見つけたMSDNで
PreserveSig直接HRESULTまたはretvalの値を使用して管理されていない署名を変換するためにtrueにPreserveSigフィールドを設定します。 falseに設定すると、HRESULTまたはretvalの値が自動的に例外に変換されます。既定では、PreserveSigフィールドはtrueです。
SetLastError呼び出し元がMarshal.GetLastWin32Error API関数を使用して、メソッドの実行中にエラーが発生したかどうかを判断できるようにします。 Visual Basicでは、既定値はtrueです(オーバーヘッドが追加されます)。 C#とC++では、デフォルトはfalseです。
私の質問は次のとおりです。これらの2つはどう関係していますか? PreserveSigを 'false'に設定したとします。つまり、HRESULTを例外に変換する必要があります。アンマネージ関数がエラーを示す整数を返すか、エラーが発生しなかった場合、どのようにして例外に変換できますか?
また、私は何とかPreserveSigを使用して例外を抽出できたら、なぜGetLastWin32Errorメソッドを呼び出す必要がありますか?
種類は PK
私はCOMオブジェクトの経験がありませんので、メソッドシグネチャの作成に関するもう1つ質問してください。問題は、COM関数がHRESULTを返すと、私のメソッドをvoidを返すようにマークし、PreserveSig = false(あなたの言ったように)を設定するかPreserveSig = trueに設定し、IntPtrを返して、 – pkolodziej
はい、正しいですが、HRESULTはUInt32でありIntPtrsではありません。 –
ありがとうございます - あなたはとても役に立ちました。 – pkolodziej