如何使用单声道嵌入将字符串参数传递给 c# 方法

How to pass string parameter to c# method using mono embedded?

本文关键字:字符串 参数传递 方法 单声道 何使用 声道      更新时间:2023-10-16

我想使用单声道嵌入将string参数传递给 c# 方法。下面是 c# 方法:

public static void CallMe(string value)
{
    Console.WriteLine(value);
}

这是 c++ 调用:

PVOID method = mono_class_get_method_from_name(Class, string("CallMe").c_str(), 1);
mono_runtime_invoke(method, NULL, new void*[1] { (void*)"Hello World!" }, NULL); 

打印的值为空字符串或问号。我该如何解决这个问题?

您必须首先使用 mono_string_new 将字符串转换为 MonoString

如果要传递值类型,则需要传递指针(字符串已经是指针(。

请记住mono_class_get_method_from_name C# 方法中的参数数设置param_count

C++:

void RunMonoMethodWithParams(MonoDomain* domain, PCHAR _namespace, PCHAR _class, PCHAR _method, PCHAR param1)
{
    .
    .
    .
    //Open assembly, get image, class from name...
    .
    .
    .
    PVOID method = mono_class_get_method_from_name(_class, _method, 2);
    
    int param0 = 0xFF;
    //Each index equals 1 parameter
    PVOID args[2];
    args[0] = &param0;
    args[1] = mono_string_new(domain, param1);
    mono_runtime_invoke(method, NULL, args, NULL);
}

C#:

public static int CSharpMethod(int param0, string param1)
{
    ...
}