Возвращаемое значение от делегата

208
09 августа 2021, 15:10

В проекте C# я использую делегаты для вызова методов из библиотеки C++, загруженную в процесс.Использую данный код:

[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
internal delegate void Generation();
internal static Generation GenerationInvoker;
CreateDelegate < Generation > ("TestExample")
internal T CreateDelegate < T > (string procName) where T: class {
    var procAddress = GetProcAddress(procName);
    if (procAddress != IntPtr.Zero) {
        return (T)(object) Marshal.GetDelegateForFunctionPointer(procAddress, typeof(T));
    }
    return null;
}

Метод успешно вызывается, но могу ли я вернуть ответ из вызываемого метода?Допустим вернуть числовое значение с "плавающей" запятой (float).

Answer 1

Необходимо всего лишь исправить тип возврата делегата:

[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
internal delegate void Generation();

переписать на

[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
internal delegate float Generation();
READ ALSO
json file serialization. Reflection

json file serialization. Reflection

Необходимо Передать в метод string[], а на выходе получить значение объекта

122
Как встроить конфигурационный файл в приложение c#?

Как встроить конфигурационный файл в приложение c#?

По этому вопросу было много ответов, только ничего не подходит, поскольку склеивание файла лишает смысла всю программу, и я пишу в файл настройки,...

329