WinPcap C#Wrapping pcap_findalldevs()抛出PInvokeStackImbalance

时间:2011-07-15 15:01:18

标签: c# pinvoke marshalling wrapper winpcap

我正在尝试为winpcap编写一个C#包装器。它在我尝试调试时给出警告PInvokeStackImbalance,但pcap_findalldevs完成它的工作。但我认为这会导致程序中的内存泄漏。顺便说一句,这个代码是来自networkminer我没有写这个只是试图理解winpcap和包装。

    这是WinPcap中的方法

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; 

1 个答案:

答案 0 :(得分:3)

您缺少cdecl调用约定:

[DllImport("wpcap.dll", CallingConvention=CallingConvention.Cdecl, CharSet=CharSet.Ansi)]

DllImport的默认调用约定是stdcall,但我敢打赌WinPcap库导出为cdecl