Утечка ресурсов при использовании DLL VCL (C ++ Builder) из .NET - PullRequest
0 голосов
/ 20 января 2010

У меня есть DLL, написанная на C ++ Builder (2006), и я вызываю одну функцию в DLL из приложения .NET.

Проблема в том, что когда я закрываю приложение .NET (и DLL отсоединяется от него), я получаю ошибку CodeGuard, говорящую о том, что обнаружены утечки ресурсов (и я вижу утечки в файле журнала CodeGuard). Я также вижу, как LoaderLock MDA появляется в Visual Studio при освобождении DLL (возможно, по той же причине?).

Теперь я на 99% уверен, что освобождаю всю память, которую я использую в функции DLL. На самом деле, я попытался создать фиктивную DLL с функцией с таким же именем, которая абсолютно ничего не делает, и все еще получала утечки ресурсов, когда DLL выгружалась из приложения .NET.

На данный момент я подозреваю только то, что я использую VCL, встроенный в DLL. Есть ли какая-то функция деинициализации, которую мне нужно явно вызывать при отсоединении от DLL? Что может происходить?

p.s. Адреса памяти из стека вызовов, указанные в файле журнала CodeGuard, кажутся намного превосходящими все, что я вижу в своем файле карты.

1 Ответ

1 голос
/ 20 января 2010

Это звучит очень знакомо для проблемы, которую я преследовал некоторое время с Delphi. Я задал вопрос о ТАК некоторое время назад. Я отследил это, по крайней мере, частично до threadvar (локальное хранилище потоков) памяти, которая не освобождается. Я считаю, что C ++ Builder использует те же компоненты VCL, что и Delphi, поэтому это может быть та же проблема. К сожалению, я не нашел никакого удовлетворительного решения, кроме как не выгружать DLL, если она когда-либо будет загружена снова в будущем.

...