Вариант 1: .NET InstallUtil (часть обычной установки .NET)
Добавьте ссылку на System.Configuration.Install
, затем добавьте что-то подобное в вашу сборку:
[System.ComponentModel.RunInstaller(true)]
public class Sample : System.Configuration.Install.Installer
{
public override void Uninstall(System.Collections.IDictionary savedState)
{
base.Uninstall(savedState);
this.Context.LogMessage("This can be in a .dll.");
// Do your thing...
}
}
Затем злоупотребьте .NET InstallUtil:
%windir%\Microsoft.NET\Framework\v2.0.50727\installutil /logtoconsole=false /logfile= /u [your assembly .dll here]
Это может быть немного грязно, особенно без всех параметров командной строки, отключающих ведение журнала.
Опция 2:используйте встроенный rundll32 для инвертирования P / Invoke статического метода класса
2016 Редактировать: Теперь пакет Nuget: UnmanagedExports ( src )!
Неизвестные директивы MSIL (msdn forum, 2007) - ссылка на бета-версию Справочника программиста на языке ассемблера IL (10/3/2000, стр.74), в которой говорится:
Если задано fromunmanaged, среда выполнения автоматически сгенерирует thunk, который преобразует вызов неуправляемого метода в управляемый вызов, вызовет метод и вернет результат в неуправляемую среду.
Подробнее см. В Expert .NET 2.0 IL на ассемблере и Внутри Microsoft.NET IL Assembler .(Лучшие ключевые слова для поиска: ilasm vtentry).
Похожие материалы:
Неуправляемый экспорт: не удается скомпилировать сборку (stackoverflow, 2010)
Неуправляемый экспорт / RGiesecke.DllExport.dll (stackoverflow, 2010)
Создание библиотеки DLL C #, которую можно импортировать в приложение Delphi с помощью stdcall (stackoverflow, 2009)
Шаблон проекта C # для неуправляемых экспортов ( Robert Giesecke , 2010) - msbuild, интеграция vs2010
Обновление IKVM.Reflection: экспорт статических управляемых методовкак неуправляемый экспорт DLL (моно, 2011)
Простой метод экспорта DLL без C ++ / CLI (codeproject, 2009) - 64-битная поддержка отсутствует?
Как автоматизировать экспорт функции .NET в неуправляемые программы (codeproject, 2006) - поддерживает 64-разрядные
Что-нибудь было добавлено в .Net 4.0 для поддержки "Обратного P /Вызывать "сценарии? (форум MSDN, 2010) - список кодов
UnmanaGed-код может переносить управляемые методы (codeproject, 2004)
Потенциальные недостатки:
Поправки с обратным пинвоуком (неуправляемые к обратным вызовам управляемого кода) (блог msdn,2006)
Обратный P / Invoke и исключение (MSDN блог, 2008)