同僚、
前文。私の質問は、ベストプラクティスについてです。私は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ポインターを渡すことができるようにするには、宣言を次のように変更する必要がありました。
[DllImport("setupapi.dll", CharSet = CharSet.Auto, SetLastError = true)]
static extern bool foo(IntPtr sDataStruct);
IntPtr.Zero
これでポインタを渡すことができnull
ますが、パラメータは強く型付けされなくなりました。与えられた状況で、強く型付けされたパラメーターとnullポインターを渡す機能の両方を持つ方法はありますか?
どんな提案、洞察または参照も本当にありがたいです!
乾杯、
-ニック