Обтекание WinPcap C # pcap_findalldevs () выбрасывает PInvokeStackImbalance - PullRequest
1 голос
/ 15 июля 2011

Я пытаюсь написать оболочку C # для winpcap.Он выдает предупреждение PInvokeStackImbalance при попытке отладки, но pcap_findalldevs выполняет свою работу.Но я думаю, что это приведет к утечке памяти в программе.Кстати, этот код от сетевого администратора, я не писал это, просто пытаясь понять 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 Ответ

3 голосов
/ 15 июля 2011

Вам не хватает cdecl соглашения о вызовах:

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

Соглашение о вызовах по умолчанию для DllImport равно stdcall, но я бы поспорил, что библиотека WinPcap экспортируется как cdecl.

...