Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 2010 C#字符串与标准:字符串:传递字符串中的问题_Visual Studio 2010_Visual C++_Opencv_Image Processing_C++ Cli - Fatal编程技术网

Visual studio 2010 C#字符串与标准:字符串:传递字符串中的问题

Visual studio 2010 C#字符串与标准:字符串:传递字符串中的问题,visual-studio-2010,visual-c++,opencv,image-processing,c++-cli,Visual Studio 2010,Visual C++,Opencv,Image Processing,C++ Cli,请查看以下opencvcode void ImageWriter::writeImage(Mat image) { number++; String name="D:/OpenCV Final Year/Images/intruder"; name+=number; name+=".bmp"; //imwrite("D:/OpenCV Final Year/Images/intruder.bmp",image); imwrite(name,ima

请查看以下
opencv
code

void ImageWriter::writeImage(Mat image)
{
    number++;
    String name="D:/OpenCV Final Year/Images/intruder";
    name+=number;
    name+=".bmp";

    //imwrite("D:/OpenCV Final Year/Images/intruder.bmp",image);
    imwrite(name,image);
}
在这里,我只能说,
imwrite()
没有写任何东西!没有错误,但也没有输出。如果我使用的是
imwrite()
的注释版本,它将按预期工作。但是我不能使用它,因为我需要写入图像的数量,所以由
number
integer变量进行的名称更改很重要。我认为问题在于
名称
字符串

然而,这个
名称
的类型是
C#
,这是因为
std:string
冲突

我如何才能使这个动态名称创建成功,并使
imwrite()
正常工作?

只是一些想法 您是否尝试过:

  • 使用字符数组?(
    char[]
  • StringStream
  • 字符串格式,而不是
    +=

  • 它不起作用,因为您正试图将托管的.NET System::String对象传递给需要std::String的函数。查看此处的文档,它似乎需要一个常量字符串&类型

    如果您是用C#编写的,那么就没有一种方法能够“声明”std::string对象

    我会先看看name.ToCharArray()是否有效。虽然这将生成一个托管数组,但编译器可能会完成从托管字符数组到本机数组的所需转换

    使用C++/CLI时,需要将托管字符串封送为std格式:

    #include <string>
    using namespace std;
    using namespace System;
    
    void MarshalString (String^ s, string& os )
    {
       using namespace Runtime::InteropServices;
       const char* chars = 
          (const char*)(Marshal::StringToHGlobalAnsi(s)).ToPointer();
       os = chars;
       Marshal::FreeHGlobal(IntPtr((void*)chars));
    }
    
    void ImageWriter::writeImage(Mat image)
    {
        number++;
        String name="D:/OpenCV Final Year/Images/intruder";
        name+=number;
        name+=".bmp";
    
        string nativeString;
        MarshalString(name, nativeString);
    
        imwrite(nativeString, image);
    }
    
    #包括
    使用名称空间std;
    使用名称空间系统;
    无效封送处理字符串(字符串^s、字符串和操作系统)
    {
    使用命名空间运行时::InteropServices;
    常量字符*字符=
    (常量字符*)(封送:StringToHGlobalAnsi(s)).ToPointer();
    os=字符;
    marshall::FreeHGlobal(IntPtr((void*)chars));
    }
    void ImageWriter::writeImage(Mat图像)
    {
    数字++;
    String name=“D:/OpenCV最后一年/图像/入侵者”;
    姓名+=号码;
    名称+=“.bmp”;
    字符串转换;
    MarshalString(名称,nativeString);
    imwrite(本地投资、图像);
    }
    
    什么意思“
    std::string
    冲突”?解决了这两种类型之间的转换。@Aurelius:对不起,我的回复耽搁了。对于std:string,它会生成错误什么类型的错误?编译错误?运行时错误?他们怎么说?@Aurelius:很抱歉又耽搁了。错误为“错误:c2440:'初始化”:无法从System::String^转换为std::basic_String”。感谢您的回复。我正在用C++/CLI编写\