Как интерпретировать FNPTR из подписи типа BLOB?

Как мне следует интерпретировать FNPTR, за которым следует MethodDefSig или MethodRefSig? Я имею в виду, что BOOLEAN - это bool, OBJECT - это объект, SZARRAY - массив с нулями, но у FNPTR есть сигнатура метода, и я не могу написать что-то вроде:

public static int*(int) myFunction();

Может кто-нибудь объяснить мне, как это работает?

1 ответ

FNPTR - это элемент подписи, обозначающий низкоуровневый указатель на управляемую функцию, который может использоваться calli код операции, например. Насколько я знаю, их использует только C++/CLI (для поддержки стандартных указателей функций C++ и ссылок), и я полагаю, что именно низкоуровневые языки были причиной их включения в CIL.

Несмотря на то, что это ключевая особенность CLI, в API отражений их поддержка отсутствует (кроме этого). Они фактически не используются, кроме создания отдельной сигнатуры для перегрузок методов, поэтому вы можете безопасно использовать IntPtr, если сможете.

Указатели на функции в основном представляют собой низкоуровневый эквивалент делегатов, только без целевого объекта (и не являющиеся самими объектами). Если вам нужен высокоуровневый эквивалент, делегатов Action и Func может быть достаточно.

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