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

После прочтения Динамический вызов неуправляемых библиотек в .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 Ответ

1 голос
/ 28 августа 2009

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

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