Я вызываю метод C++ из кода C#. Все работает отлично, за исключением возврата нескольких параметров обратно на C#.Как вернуть класс из C++ кода в C#
В моем случае эти параметры: int x, y, width, height;
То, что я хочу сделать, это вернуть класс или структуры из C++ кода C#.
Я привел пример, чтобы было гораздо более ясно, что у меня на уме. Я знаю, что один путь - использовать класс Маршала, возможно, единственный способ.
C# код код
public class ImageMatch
{
//method that is used to call pass string parameters and call c++ method
[System.Runtime.InteropServices.DllImport("ImageComputingWrapper.dll", CallingConvention = System.Runtime.InteropServices.CallingConvention.Cdecl)]
static extern ImageComputingWrapper.ImageParams ComputeImage(string imgPath, string templPath);
public GetImgParams(string imgPath, string templPath)
{
//a class from C++ code
ImageComputingWrapper.ImageParams imgParams;
//retreive all the data
imgParams = ComputeImage(imgPath, templPath);
}
}
C++
//ImageComputingWrapper.cpp
extern "C" __declspec(dllexport) ImageComputingWrapper::ImageParams ComputeImage(const char* imgPath, const char* templPath)
{
computeImage* compImage = new computeImage(imgPath, templPath);
ImageComputingWrapper::ImageParams imageParams;
imageParams.x = compImage->x;
imageParams.y = compImage->y;
imageParams.width = compImage->width;
imageParams.height = compImage->height;
return imageParams;
}
//ImageComputingWrapper.h
//class to return back to c#
public ref class ImageParams
{
public:
ImageParams(){}
int x;
int y;
int width;
int height;
};
Я знаю, что это не возможно вернуть класс из кода C++ на C#, как это в данном примере. Просто понять, что я имел в виду.
Одна вещь, чтобы указать, я программист на C#, поэтому в этом коде C++ (указатели) может быть что-то не так.
можно дублировать http://stackoverflow.com/questions/315051/using-a-class -defined-in-ac-dll-in-c-sharp-code – DLeh
Это система :: Рисование :: Прямоугольник. Точка использования C++/CLI заключается в том, чтобы ** не ** использовать [DllImport] в вашей программе на C#. Просто добавьте ссылку на свой проект C++/CLI. Теперь вы увидите только ImageParams, вы уже знаете, как написать настоящий ImageComputingWrapper. –