Можно ли записать Win32 .dll файлы с помощью C # .NET? - PullRequest
3 голосов
/ 21 декабря 2010

Можно ли записывать файлы Win32 .dll с помощью C # .NET? Если да, где я могу найти учебники? Если нет, то что вы предлагаете написать Win32 .DLLs?

Спасибо.

Ответы [ 4 ]

3 голосов
/ 16 августа 2012

Да, это возможно. На самом деле есть инструмент для этого. Это немного скрыто в приложении Rainmeter.

Rainmeter SDK для C # включает исполняемый файл с именем CS_DLL_FOR_C.exe, который преобразует общедоступные статические методы во внешние функции, вызываемые собственными приложениями. Фактически, сам Rainmetere разработан на C ++ и загружает плагины LoadLibrary

Вы можете скачать x86 и x64 версию этого инструмента, используя следующие ссылки

x86 версия

x64 версия

PS: я не знаю, если это против лицензии Rainmeter распространять этот инструмент.

2 голосов
/ 16 марта 2011

Похоже, вы пытаетесь создать классическую Win32 DLL с экспортом в стиле Win32?(Экспорт в стиле Win32 - это то, что обнаруживает DllImport.) Это невозможно сделать с помощью управляемого кода (C # или управляемого C ++);Насколько я знаю, для этого вам нужно будет использовать неуправляемый C / C ++.

Программирование Windows Чарльзом Петцольдом или аналогичная книга по программированию Win32 может быть хорошим местом для начала;или найдите образец Win32 DLL «Hello World».Или просто создайте проект Win32 DLL в Visual Studio и посмотрите на файлы, которые он создает для вас, вероятно, должен быть какой-то текст-заполнитель, чтобы начать работу.

Управляемый код использует файлы, которые также имеют .dll в качестверасширения, но они на самом деле являются контейнерами для управляемого кода и не имеют точек входа в стиле Win32, поэтому другой код, ожидающий точки входа Win32, не может их использовать.Их иногда называют «управляемыми сборками», а не библиотеками, чтобы избежать путаницы.

-

Обновление - возможен альтернативный вариант: вы можете создать то, что называется "DLL смешанного режима ", которая содержит как собственный код, так и управляемый код.Эта DLL может иметь управляемый класс C #, который вы хотите «экспортировать», и небольшое количество смешанного C / C ++, который экспортирует API в стиле Win32.Хотя это возможно, это не обязательно хорошая вещь: код, ожидающий загрузки простой библиотеки Win32 DLL, может не ожидать загрузки CLR;и вы можете столкнуться с проблемами, если у процесса уже есть конфликтующая версия CLR, уже загруженная.DLL-библиотеки смешанного режима, как правило, более полезны для того, чтобы сборка C # могла повторно использовать код C / C ++, вместо того, чтобы позволить C # / управляемому коду маскироваться под Win32 DLL.

1 голос
/ 21 декабря 2010

Вы можете предоставить любую сборку .NET, которую вы пишете, как объект com.

См. эти руководства (для VS 2003, но все еще действительны).

0 голосов
/ 21 декабря 2010

Конечно, вы можете создавать DLL-файлы в C #.

Все, что вам нужно, это выбрать библиотеку классов в типе проекта при создании нового проекта в Visual Studio.

Вотучебное пособие: http://www.c -sharpcorner.com / uploadfile / mahesh / dll12222005064058am / dll.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...