Как интерпретировать 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 может быть достаточно.