0

この問題を解決する方法がわからず、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 AssistantPInvokeStackImbalanceが (MY APP EXE) で問題を検出しました。

PInvoke追加情報:関数の呼び出しがVP::ZLNET_QueryDeviceTimeスタックのバランスを崩しました。これは、マネージドPInvokeシグネチャがアンマネージド ターゲット シグネチャと一致しないことが原因である可能性があります。PInvoke シグネチャの呼び出し規約とパラメーターがターゲットのアンマネージド シグネチャと一致することを確認してください。」

その後、ZLNET_TIME変数には何も返されません。誰でもこれで私を助けることができますか?

4

1 に答える 1