LINUX.ORG.RU

История изменений

Исправление SaBo, (текущая версия) :

Почему не работает load_assembly_and_get_function_pointer разобрался: в delegate_type_name нужно указывать не сигнатуру метода, а подходящий под сигнатуру делегат.

namespace TestLib
{
    public static class Class1
    {


        public static int Method1(System.IntPtr arg, int argLength)
        {
            return 1;
        }

        public static int Method1(int a)
        {
            return a * 2;
        }

        public delegate int Method1Delegate(int a);

    }
}
typedef int (*method1_fn)(int);

...

method1_fn method1_int = nullptr;
std::cout << "Get  Method1(int): " << load_assembly_and_get_function_pointer_fptr(
    dotnetlib_path,
    type_name,
    method_name,
    L"TestLib.Class1+Method1Delegate, TestLib",
    nullptr,
    (void**)&method1_int
) << std::endl;

Правда, теперь приложение вылетает при попытке вызова метода:

int a = 3;
std::cout << "Call Method1(int) : " << method1_int(a) << std::endl;

Исходная версия SaBo, :

Почему не работает load_assembly_and_get_function_pointer разобрался: в delegate_type_name нужно указывать не сигнатуру метода, а подходящий под сигнатуру делегат.

namespace TestLib
{
    public static class Class1
    {


        public static int Method1(System.IntPtr arg, int argLength)
        {
            return 1;
        }

        public static int Method1(int a)
        {
            return a * 2;
        }

        public delegate int Method1Delegate(int a);

    }
}
typedef int (*method1_fn)(int);

...

method1_fn method1_int = nullptr;
std::cout << "Get  Method1(int): " << load_assembly_and_get_function_pointer_fptr(
    dotnetlib_path,
    type_name,
    method_name,
    L"TestLib.Class1+Method1Delegate, TestLib",
    nullptr,
    (void**)&method1_int
) << std::endl;
//
int a = 3;
std::cout << "Call Method1(int) : " << method1_int(a) << std::endl;

Правда, теперь приложение вылетает при попытке вызова метода:

std::cout << "Call Method1(int) : " << method1_int(a) << std::endl;