0

これは、最後のエラーをバッファに取得するために取得したコードですが、IntPtrを読み取り可能なものに変換する方法がわかりません...長い数値を取得するだけです。

/// Return Type: void
///pErrorCode: ABS_DWORD*
///ppErrorMessage: ABS_CHAR**
        [System.Runtime.InteropServices.DllImportAttribute("bsapi.dll", EntryPoint = "ABSGetLastErrorInfo", CallingConvention = System.Runtime.InteropServices.CallingConvention.StdCall)]
        public static extern void ABSGetLastErrorInfo(ref uint pErrorCode, ref System.IntPtr ppErrorMessage);

これはマニュアルからです:

void ABSGetLastErrorInfo(
OUT ABS_DWORD *pErrorCode
OUT const ABS_CHAR **ppErrorMessage
)

説明現在のスレッドで発生した最後のBSAPIエラーに関する追加情報を取得します。

ppErrorMessage出力時に、これはテキストメッセージを含むゼロで終了する文字列を含むバッファを指すように設定されます。

メッセージが提供されない場合、メッセージは空の文字列を指しているため、呼び出し元はNULLをチェックする必要はありません。

バッファはBSAPIによって管理されます。ABSFreeを使用して解放しないでください。バッファは、他のBSAPI呼び出しが同じスレッドで実行されるまでのみ有効であることに注意してください。次の呼び出しの後、バッファはBSAPIによって解放または再利用される場合があります。メッセージを覚えておく必要がある場合は、それを自分のバッファにコピーする必要があります。

4

1 に答える 1

2

次のように定義

 public static extern void ABSGetLastErrorInfo(ref uint pErrorCode, StringBuilder ppErrorMessage);

StringBuilder出力文字列に使用されます。ここを参照してください。

文字列パラメーターが入力および/または出力できる場合は、System.StringBuilder 型を使用します。StringBuilder 型は、文字列を効率的に作成するのに役立つ便利なクラス ライブラリ型であり、ネイティブ関数にバッファーを渡して、関数がユーザーに代わって文字列データを入力するのに最適です。関数呼び出しが返されたら、StringBuilder オブジェクトで ToString を呼び出すだけで、String オブジェクトを取得できます。


アップデート

Jim Kindly が述べたように、StringBuilderas ref を定義します。

public static extern void ABSGetLastErrorInfo(ref uint pErrorCode, ref StringBuilder ppErrorMessage);
于 2011-05-03T15:43:49.860 に答える