История изменений
Исправление 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;