1

我正在尝试为 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; 
4

1 回答 1

3

您缺少cdecl调用约定:

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

的默认调用约定DllImportstdcall,但我敢打赌 WinPcap 库导出为cdecl.

于 2011-07-15T16:09:15.137 回答