Я не очень много знаю о C++, но мне нужно заставить код C++ работать с .NET. Я пытаюсь использовать DLLImport, но мне это не удалось. Поэтому я пытаюсь с C++/CLI сделать что-то вроде оболочки.
Но я не уверен, что все понимаю...
Это базовый файл C++ H с функцией, которую я хочу экспортировать (MyFunction).
extern "C"
{
__declspec(dllexport) IplImage* MyFunction(IplImage *src, std::string* name, OneEnumerationType myEnum, bool myBool, float myFloat);
}
Это код Wrapper h.
#include "MyFunction.h"; // the file containing the h code
#include <string>
namespace MyWrapper{
public ref class MyWrapperClass {
public:
MyWrapper(){};
IplImage^ GetMyFunction(IplImage *src, std::string^ name, OneEnumerationType myEnum, bool myBool, float myFloat);
}
Это код cpp оболочки.
#include "MyWrapperCode.h";
namespace MyWrapper{
IplImage^ MyWrapperClass::GetMyFunction(IplImage* src, std:string^ name, OneEnumerationType myEnum, bool myBool, float myFloat){
MyFunction(src, name, myEnum, myBool, myFloat);
}
}
Это мои вопросы:
1) Когда я компилирую, ошибка "^: не может использовать эту косвенность для типа IplImage" и то же сообщение для типа "std::string". Я следовал этому логическому:
ClasseNative clNat2 = *clNat; --> ClasseManagee clMan2 = *clMan;
ClasseNative &clNat3 = clNat2; --> ClasseManagee %clMan3 = clMan2;
ClasseNative *clNat4 = &clNat2; --> ClasseManagee ^clMan4 = %clMan2;
Я видел, что лучше использовать System::String. Я пытаюсь так, но начальная функция использует std::string... Кстати, почему лучше изменить?
2) Как получить результат MyFunction IplImage? Я полагаю, через частный член и получение, но я не знаю, как его инициализировать...
3) Сложный вопрос. Могу ли я поместить CLI, получающий структуру IplImage (из библиотеки OpenCV) (результат моей функции) внутри структуры IplImage .NET, когда я буду вызывать свою оболочку? Не знаю, понятен ли вопрос...
Большое спасибо за твою помощь. 3 дня крутился с этой проблемой...