Как мне вызвать метод C# stati c из C ++, где метод C# принимает в качестве параметра. NET System.Object? - PullRequest
0 голосов
/ 29 мая 2020
  1. У меня есть программа на C ++, которая вызывает метод C# (через DLL-оболочку C ++ / CLR).
  2. Метод C# принимает. NET System.Object как объект параметр.
  3. C ++ вызывает метод C# с int, double или std :: string

Ниже извлекается исходный код. Пример приложения здесь https://github.com/gosomi1339/CallCSharpFromCpp (в настоящее время заблокировано)

C ++ вызывает C ++ / CLR DLL

{
    int x = 1;
    double result = ClrWrapper::SetObject(&x);
    std::cout << "Result 1= " << result << std::endl;
}

{
    double x = 1;
    double result = ClrWrapper::SetObject(&x);
    std::cout << "Result 2= " << result << std::endl;
}

{
    std::string x = "1";
    double result = ClrWrapper::SetObject(&x);
    std::cout << "Result 3= " << result << std::endl;
}

C ++ / CLR DLL вызывает C# stati c method

DllExport double ClrWrapper::SetObject(void* x) {
    return Class1::SetObject(x); //<----- this does not compile
}

Метод C# stati c принимает объект в качестве параметра

public static double SetObject(object o)
    {
        if (o is int)
        {
            return (int)o + 1;
        } else if (o is double)
        {
            return (double)o + 2.2;
        } else
        {
            return 3.3;
        }
    }
  1. На стороне C# я готов для нас неуправляемый / небезопасный код.
  2. Я пытаюсь избежать создания отдельных методов SetInt, SetDouble, SetString.

Вопросы

  1. Как вызвать метод C#?
  2. Как маршалировать переменную C ++ в C# объект?
...