Как я могу контролировать, когда DLL отсоединена - PullRequest
0 голосов
/ 07 июля 2011

У меня есть DLL, которую я хочу добавить в мой проект C #, и у меня есть некоторые проблемы. Во-первых, моя DLL написана на C ++, и я получил интерфейс одной функции для ее экспорта.

extern "C" __declspec(dllexport) char* sniff() 
{
    return ps.Sniff();
}

У меня есть экземпляр "ps", который инициализирует сокет при подключении DLL. Дело в том, что мне нужно инициализировать этот экземпляр при вызове моей экспортированной функции. Моя проблема заключается в том, что когда я импортирую его в свой проект C #, моя DLL отключается без видимой причины, и я больше не могу вызывать экспортированную функцию.

Я использую этот синтаксис в моем проекте C #:

[DllImport(@"C:\Documents and Settings\Pat\Bureau\sniffoporn\Release\sniff.dll", EntryPoint = "sniff", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
        public static extern IntPtr sniff();

Некоторые важные вещи, которые я попробовал:

  1. Импортировать DLL в ссылку на проект: невозможно, потому что это не COM-компонент.
  2. Импортировать DLL вручную, используя LoadLibrary, FreeLibrary и GetProcAddress: тот же результат
  3. Вызов моей экспортированной функции в цикле: то же самое, но DLL подключается немного дольше, прежде чем отключаться.

Я хотел бы знать, почему моя DLL отсоединяется и как я могу сохранить ее подключенной до конца процесса.

Большое спасибо

1 Ответ

0 голосов
/ 08 июля 2011

Возможно, исключение происходит в самой вашей DLL.Отключение в Visual Studio для предотвращения сбоя приложения.В конце концов C # - это управляемый код.

Попробуйте те же самые процедуры с другой (фиктивной) dll с очень простой функциональностьюЕсли это все еще происходит, значит, что-то не так с вашим методом, иначе с DLL, которую вы пытаетесь использовать.

...