同僚、ref、ヌルポインタ、IntPtrで構造体を渡すことに関するInteropの質問
プリアンブル。私の質問はベストプラクティスの詳細です。私は1つの回避策を知っています。これは、C#での相互運用性を処理しなければならないのは初めてですが、同時にCとC++で相当量のコードを書いています。
アンマネージDLLによって公開されている関数の2倍を呼び出す必要があります。この関数は、構造体へのポインタを引数として取ります。初めてnull
ポインタを渡す必要があります。 2回目は、構造体のインスタンスへのポインタを渡す必要があります。
この関数には6つのパラメータがあります。以下では、この質問の目的で機能する簡単な宣言を示します。 (誰もが興味を持っている場合、私は詳細を投稿することができます。)ここでは、宣言の第一変種です:
[DllImport("setupapi.dll", CharSet = CharSet.Auto, SetLastError = true)]
static extern bool foo(ref NEEDED_STRUCT_TYPE sDataStruct);
私はそれが好き、それは強く型付けされたNEEDED_STRUCT_TYPE
のためだからです。しかし、NULLポインタを渡すことができるように、私は今、私はnull
ポインタにIntPtr.Zero
を渡すことができ
[DllImport("setupapi.dll", CharSet = CharSet.Auto, SetLastError = true)]
static extern bool foo(IntPtr sDataStruct);
に宣言を変更しなければならなかったが、パラメータはもはや強く型付けされません。与えられた状況では、強く型付けされたパラメータとヌルポインタを渡す能力の両方を持つ方法がありますか?
どのような提案、洞察力または参照は本当に感謝しています!その後、ニック