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编写\