この問題を解決する方法がわからず、2 時間のほとんどの間、レンガの壁に頭をぶつけていました。次のドキュメントを使用して、アンマネージ DLL に関数があります。
BOOL ZLNET_QueryDeviceTime(LONG lLoginID, LPZLNET_TIME pDeviceTime, int waittime=2000);
はポインターであると想定しているpDeviceTime
ため、参照として使用するために C# コードで渡します。私の C# プロジェクトには、次の宣言があります。
[StructLayout(LayoutKind.Sequential)]
public struct ZLNET_TIME
{
public Int32 dwYear;
public Int32 dwMonth;
public Int32 dwDay;
public Int32 dwHour;
public Int32 dwMinute;
public Int32 dwSecond;
} ;
[DllImport("zlnetsdk.dll")]
unsafe public static extern bool ZLNET_QueryDeviceTime(long lLoginID, out ZLNET_TIME pDeviceTime, int waittime);
I call my function:
ZLNET_TIME t = new ZLNET_TIME();
ZLNET_QueryDeviceTime(loginResult, out t, 2000);
ただし、プロジェクトを実行すると、次のエラーが表示されます。
Managed Debugging Assistant
PInvokeStackImbalance
が (MY APP EXE) で問題を検出しました。
PInvoke
追加情報:関数の呼び出しがVP::ZLNET_QueryDeviceTime
スタックのバランスを崩しました。これは、マネージドPInvoke
シグネチャがアンマネージド ターゲット シグネチャと一致しないことが原因である可能性があります。PInvoke シグネチャの呼び出し規約とパラメーターがターゲットのアンマネージド シグネチャと一致することを確認してください。」
その後、ZLNET_TIME
変数には何も返されません。誰でもこれで私を助けることができますか?