2014-09-01 41 views
0

我從C#調用winscard.dll方法,並且在調試模式下一切正常。問題我得到的是在釋放模式SCardEstablishContext未在發佈模式下設置上下文指針

我的呼叫建立上下文

[DllImport("winscard.dll")] 
public static extern int SCardEstablishContext(int dwScope, int pvReserved1, int pvReserved2, ref int phContext); 

在我的測試應用程序時,我把這個pntContext變量似乎得到在調試模式設置正確。但是,在發佈模式下它沒有被設置。但奇怪的是,返回碼仍然是0(成功)。

所以,我只是想知道可能會導致這種情況的是什麼情況,或者我可能做錯什麼其他事情?

P.S. 我還檢查的一件事是編譯平臺設置爲任何CPU。我正在嘗試更換平臺,並且當我將x86作爲平臺和發佈模式時,它就會開始工作。這種奇怪的行爲,爲什麼它然後在調試模式下工作?

+0

你在使用什麼操作系統?我已經在Win7和win8上使用了這個api與anyCpu編譯,我沒有注意到你遇到的問題。 無論如何,我使用此語法 昏暗hContext作爲IntPtr的= Marshal.AllocHGlobal(Marshal.SizeOf(mContext)) mLastError = SCardEstablishContext(Scope.User,IntPtr.Zero,IntPtr.Zero,hContext) – AlexF 2014-09-01 08:36:14

回答

2

我看不出什麼不尋常的東西,因爲你的編組對於64位Windows完全錯誤,其中指針長度爲8字節。您應該使用IntPtr類型,它在32位Windows上爲4個字節,在64位Windows上爲8個字節。你的情況

[DllImport("winscard.dll"] 
public static extern Int32 SCardEstablishContext(
    [In] Int32 dwScope, 
    [In] IntPtr pvReserved1, 
    [In] IntPtr pvReserved2, 
    [In, Out] ref IntPtr phContext); 

即使是更好的選擇是使用成熟的管理winscard.dll包裝像pcsc-sharp

+0

由於Jariq。將嘗試它 – 2014-09-01 10:18:31