Можете ли вы использовать.net 3.5 Action или Func в качестве неуправляемых делегатов Marshalled?

После прочтения динамического вызова неуправляемых dll в.net

Я пытался изменить код по своему вкусу. Я сделал класс, который реализует неразборчиво, чтобы обернуть загрузки вызовов и освободить их при необходимости. Однако я не могу понять синтаксис, если возможно использовать анонимных делегатов с ним.

var loaded=DynamicLibraryLoader.TryLoad("User32.dll");
var beeper=loaded.GetProcAddress("MessageBeep");
var type=typeof(Action<UInt32>);
Action<UInt32> beepAction2=(Action<UInt32>) Marshal.GetDelegateForFunctionPointer(beeper,type);

Последняя строка вызывает исключение аргумента, говорящее о том, что указанный тип не должен быть определением универсального типа. Есть ли способ обойти это, или я должен предоставить именованного делегата, чтобы сделать что-то неуправляемое?

Для справки всех интересующихся тем, что вы можете сделать по умолчанию в окнах с неуправляемым кодом - ссылка (создание ярлыков, динамическая загрузка DLL)

1 ответ

Решение

Как указывает исключение, вы должны использовать неуниверсальный делегат при преобразовании указателя встроенной функции в управляемый код.

Другие вопросы по тегам