Pointers C++/CLI如何翻译此代码? 我对C++不了解很多,但我必须用.NET来做一些C++代码。我尝试过DLLImport,但失败了。因此,我尝试使用C++/CLI制作一种包装器
但我不确定是否能理解一切Pointers C++/CLI如何翻译此代码? 我对C++不了解很多,但我必须用.NET来做一些C++代码。我尝试过DLLImport,但失败了。因此,我尝试使用C++/CLI制作一种包装器,pointers,c++-cli,iplimage,Pointers,C++ Cli,Iplimage,但我不确定是否能理解一切 这是我想导出的函数(MyFoals:)的基本C++文件 这是包装器h代码 #include "MyFunction.h"; // the file containing the h code #include <string> namespace MyWrapper{ public ref class MyWrapperClass { public: MyWrapper(){}; IplImage^ GetMyFu
这是我想导出的函数(MyFoals:
)的基本C++文件 这是包装器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);
}
以下是我的问题:
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) 棘手的问题。当我调用包装器时,我是否可以将IplImage结构(来自OpenCV库)(我函数的结果)放入IplImage.NET结构中?不知道这个问题是否可以理解
非常感谢你的帮助。
关于这个问题,您需要花3天的时间来解决…您的包装器类需要基于System::string^参数的内容创建一个新的std::string,然后传递给您的本机函数。否则,您需要重写该函数,将其他内容作为字符串输入,例如LPWSTR或LPCSTR 您可以编写一个ref类,使其具有IplImage将具有的所有数据的属性,然后将其传递给您的包装器类。您的包装器类然后基于ref类的数据创建一个IplImage对象,并传递给本机函数。只需添加“^”,即可反转返回值的数据复制方向。1)要管理本机对象,必须创建包装器或传输数据,例如:
std::string nativeString = "my string";
String^ managedString = gcnew String(nativeString.c_str());
//now you can return it as
2) 创建托管包装器或使用原始数据类型传输数据
3) 请注意,如果这有帮助,请查看
尝试阅读一些有关C++\CLI的详细信息以下是一些不错的教程:
所以我需要添加某种类型的System::String ^myVar作为私有变量?以及如何将数据从Std::String传输到System::String?作为参数。Std:String作为函数调用的局部变量。托管包装类使用者无法识别本机Std:String。感谢第二个链接。我已经阅读了第一个链接。
ClasseNative clNat2 = *clNat; --> ClasseManagee clMan2 = *clMan;
ClasseNative &clNat3 = clNat2; --> ClasseManagee %clMan3 = clMan2;
ClasseNative *clNat4 = &clNat2; --> ClasseManagee ^clMan4 = %clMan2;
std::string nativeString = "my string";
String^ managedString = gcnew String(nativeString.c_str());
//now you can return it as