1
我試圖編寫一個C#包裝winpcap。當我嘗試調試時,它給出警告PInvokeStackImbalance,但是pcap_findalldevs完成它的工作。但我認爲這會導致程序內存泄漏。順便說一句這個代碼是來自networkminer我沒有寫這只是試圖理解winpcap和包裝。
這是WinPcap的方法WinPcap C#包裝pcap_findalldevs()拋出PInvokeStackImbalance
int pcap_findalldevs(pcap_if_t ** alldevsp, char * errbuf)
這是我在我的計劃
[DllImport("wpcap.dll", CharSet = CharSet.Ansi)]
internal static extern int pcap_findalldevs(ref IntPtr alldevsp, StringBuilder errbuf);
i = IntPtr.Zero;
StringBuilder stringBuilder;
stringBuilder = new StringBuilder(256);
if (pcap_findalldevs(ref i, stringBuilder) == -1)
return null;
ty很多,但是PInvokeStackImbalance的含義是什麼?它仍在執行其工作 –
stdcall和cdecl都將參數從右向左推入堆棧。他們在清理堆棧方面有所不同。 Called清理了stdcall,調用者清理了cdecl。後者是C中可變參數的功能。您的PInvokeStackImbalance警告檢測到調用程序未清理堆棧,因爲它應該已經清除並警告您。你可能會逃避,因爲堆棧在損壞完成之前會被重新排列。但是你不會總是避開它。你必須讓你的調用約定匹配。 –
ty這麼多信息 –