我不太了解 C++,但我必须使用 .NET 编写一些 C++ 代码。我尝试使用 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 结果?我想通过一个私人成员和一个 get 但我不知道如何初始化它......
3)棘手的问题。当我调用我的包装器时,我是否可以将 CLI 获取 IplImage 结构(来自 OpenCV 库)(我的函数的结果)放入 IplImage .NET 结构中?不知道这个问题是否可以理解...
非常感谢你的帮助。在这个问题上转了3天......