を使用してプロジェクトで参照しているアンマネージ DLL がありますが、[DLLImport]
メソッド シグネチャを一致させると奇妙な結果が返されます。
DLL からの署名の例を次に示します。
DLLEXPORT unsigned long OpenPort(unsigned long ulPort,
unsigned long ulBaudRate,
unsigned long ulByteSize,
unsigned long ulPartity,
unsigned long ulStopBits,
unsigned long ulFlowControl)
関数をインポートするための C# コードは次のとおりです。
[DllImport("C:/my.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern uint OpenPort(ulong ulPort, ulong ulBaudRate,
ulong ulByteSize, ulong ulParity, ulong ulStopBits, ulong ulFlowControl);
これを の戻り値の型で宣言していることに注意してください。これuint
を使用しようとするulong
と、予期しない結果が得られるためです (通常、メモリ アドレスのように見える長い数値)。
int
ただし、 /の戻り値の型を使用すると、関数は機能し、期待される結果を返しますuint
。誰かが私のためにこの行動に光を当てることができますか?
ありがとう。