Выполненный ЗАВИСИТ от XYZ.dll непосредственно, в месте, на котором Вы развернули его. Если это ничего не показывает пропавшие без вести, используйте fuslogvw инструмент в SDK платформы для трассировки ошибок загрузчика. Кроме того, журналы событий иногда содержат информацию об отказах загрузить DLLs.
Вы смотрели Boost ?
В качестве альтернативы вы можете использовать "C ++ / CLI" (также известный как управляемый C ++, он же C ++. NET. ); код, написанный на этом языке, может вызывать .NET API, а также может вручную управлять памятью с помощью традиционных Win32 API, таких как HeapAlloc
/ HeapFree
. Однако по моему опыту, этот язык чаще всего используется для написания «связующего кода», а не для создания приложений с нуля.
Вы также можете «закрепить» сегменты кода на C #, если вы действительно хотите иметь явные указатели доступа и тому подобное ( из MSDN ):
unsafe static void TestMethod()
{
// assume class Point { public int x, y; }
// pt is a managed variable, subject to garbage collection.
Point pt = new Point();
// Using fixed allows the address of pt members to be
// taken, and "pins" pt so it isn't relocated.
fixed (int* p = &pt.x)
{
*p = 1;
}
}
Но на самом деле, Я думаю, вам лучше самому определить, почему именно вы хотите управлять памятью - большинство разработчиков, которых я знаю на данном этапе, предпочли бы сосредоточиться на реальном проектировании и построении систем, а не беспокоиться об освобождении блоков памяти. Здесь есть и другие хорошие предложения, такие как Boost (хотя, честно говоря, если у вас есть уговоры объявить, что вы лучше, чем GC, вы, вероятно, уже знаете о Boost), Qt и мосты .NET (черт, вы можете разместить CLR в неуправляемом процессе, если хотите), но я подозреваю, что в тех немногих местах, где вам действительно может потребоваться самостоятельно управлять памятью, вы
Вы можете использовать .NET dll в проекте C ++ через COM, или вы можете разместить CLR и взаимодействовать с объектами CLR, это было бы довольно громоздким кодированием, но да, это возможно. Установка Com Visible в true делает объект .NET доступным через COM в VB / MFC.
.NET имеет несколько методов сборщика мусора, которые вы можете запускать явно для сбора мусора, плюс он имеет интерфейс IDisposable, который вы можете использовать для удаления своих членов в class и с ключевым словом using вы можете явно вызвать метод dispose в конце примера использования, показанного ниже.
using (FileStream fs = File.OpenRead ("xyz.txt") { fs.Read (бафф, 0,100); } // здесь fs закрывается в dispose // метод автоматически ...
Существуют ли библиотеки C ++, которые могут конкурировать с богатым набором библиотек в .NET framework?
QT сразу приходит на ум, но я сомневаюсь, что он так же богат, как .NET-библиотека.
есть ли способ вручную освободить память на одном из языков .NET что я никогда не использовал?
Ответ на этот вопрос - да и нет. В .NET есть определенные методы для управления памятью. Есть слабые ссылки , сильные ссылки, (своего рода) принудительная сборка мусора и т. Д. Но эти вещи уже подробно обсуждаются здесь.
Вот некоторые подробности о том, как работает Управление памятью в .NET.
Сборка мусора и поколения
Лучшие практики принудительного GC в .NET
Еще лучше, прочтите ссылки в этом поисковом запросе
можно ли использовать .NET dll в стандартное приложение C ++?
Да, вы можете создавать COM Wrapper / неуправляемые оболочки для .NET DLL и использовать их в приложениях C ++.
Вы можете вызывать неуправляемый код из управляемого кода (через PInvoke) и вызывать управляемый код из неуправляемого кода (как своего рода COM-объект).
STL + Boost + Qt составляет серьезную конкуренцию C # и .NET.
Мне недавно пришлось работать над приложением Compact Framework, и я был разочарован способом WinForms по сравнению с простыми макетами Qt. Шаблон удаления также очень раздражал, было неясно, какие ресурсы нуждались в удалении, а какие нет, поэтому я в конечном итоге поискал в Google, что безопасно применять, используя () on.
На мой взгляд, обработка неуправляемых ресурсов сложнее, чем RAII C ++.