- У меня есть программа на C ++, которая вызывает метод C# (через DLL-оболочку C ++ / CLR).
- Метод C# принимает. NET System.Object как объект параметр.
- 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;
}
}
- На стороне C# я готов для нас неуправляемый / небезопасный код.
- Я пытаюсь избежать создания отдельных методов SetInt, SetDouble, SetString.
Вопросы
- Как вызвать метод C#?
- Как маршалировать переменную C ++ в C# объект?