используя DLL, которая создает массив для использования в C #

0

Я хочу создать dll, используя c++, который имеет функцию, которая создает изображение.bmp, создавая массив с использованием c++ new, заполняя его, а затем возвращая указатель. Я хочу использовать эту функцию в проекте aС#, но как мне удалить этот массив после его использования?

я создаю другую функцию в своей dll, которая получает указатель и delete[] его?

или существует способ прямого удаления массива в С#?

или С# автоматически удаляет его, когда он выходит из области видимости?

  • 1
    Вам нужно будет экспортировать функцию, которая позволит вам удалить ее снова. В остальном, очень часто встречается в интерфейсах в стиле C, вот что такое дескриптор .
Теги:
dll
arrays

2 ответа

0

вам нужно создать другую функцию для удаления указателя. С# не будет автоматически удалять его, когда он выходит из области видимости, и есть некоторые методы, которые Microsoft предоставляет для удаления объектов, но они предназначены для ручек Windows. Пример: Marshal.FreeHGlobal.

0

С# (.NET) автоматически не удаляет указатель (освобождение выделенной памяти), если ваша dll содержит unmanaged code. Освобождение неуправляемых ресурсов - ваша ответственность (.NET может сделать это за кулисами для вас, если сам создаст и использует любой неуправляемый ресурс, но ваш случай не тот же). Однако, даже если вы вручную освободите эти ресурсы (выделенная память в вашем случае), вам следует рассмотреть возможность предоставления настраиваемых методов в вашей dll вместо вызова delete непосредственно в части вызывающего абонента. Смешение разных версий и сред CRT не является хорошей практикой. Чтобы узнать, почему, пожалуйста, перейдите по этой ссылке. Лучше написать пользовательский allocater/deallocater в вашей DLL и использовать их для управления объектами.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню