即時閱讀的文本框的路徑,然後試圖打開圖像轉換^爲char *的WinForms C++
String^ P = path->Text;
IplImage* img = cvLoadImage(P);
它給了我下面的錯誤
Error 1 error C2664: 'cvLoadImage' : cannot convert parameter 1 from 'System::String ^' to 'const char *'
誰能告訴我如何轉換它char *。
即時閱讀的文本框的路徑,然後試圖打開圖像轉換^爲char *的WinForms C++
String^ P = path->Text;
IplImage* img = cvLoadImage(P);
它給了我下面的錯誤
Error 1 error C2664: 'cvLoadImage' : cannot convert parameter 1 from 'System::String ^' to 'const char *'
誰能告訴我如何轉換它char *。
System::String^str = path->Text ;
char* str2 = (char*)Marshal::StringToHGlobalAnsi(str).ToPointer();
printf(str2);
包括以下的頭文件
#using <mscorlib.dll>
using namespace System::Runtime::InteropServices;
忽略所需的Marshal :: FreeHGlobal()調用是個不錯的主意。 –
它是永遠不會太晚。
這裏是我使用
而且不要忘記,包括基本的文件的#include「saveImg.h」 調用這個頭文件由
saveImg()代碼;
saveImg.h
int saveImg(){ // int argc , char* argv[]) { // (int argc, char** argv) {
IplImage* img;
// if(argc == 2 && (img=cvLoadImage(argv[1], 1))!= 0) {
img=cvLoadImage("hello.jpg") ;
IplImage* gray = cvCreateImage(cvGetSize(img), 8, 1);
IplImage* net1 = cvCreateImage(cvGetSize(img), 8, 3);
CvMemStorage* storage = cvCreateMemStorage(0);
cvCvtColor(img, gray, CV_BGR2GRAY);
cvSmooth(gray, gray, CV_GAUSSIAN, 9, 9); // smooth it, otherwise a lot of false circles may be detected
CvSeq* circles = cvHoughCircles(gray, storage, CV_HOUGH_GRADIENT, 2, gray->height/4, 200, 100);
int i;
for(i = 0; i < circles->total; i++) {
float* p = (float*)cvGetSeqElem(circles, i);
cvCircle(img, cvPoint(cvRound(p[0]),cvRound(p[1])), 3, CV_RGB(0,255,0), -1, 8, 0);
cvCircle(img, cvPoint(cvRound(p[1]),cvRound(p[2])), cvRound(p[3]), CV_RGB(50,0,100), 3, 8, 0);
// cvWaitKey(0);
}
cvNamedWindow("Original", 1);
cvShowImage("Original", img);
cvWaitKey(0);
cvNamedWindow("circles", 1);
cvShowImage("circles", gray);
cvWaitKey(0);
return 0;
}
字符*爲字符串^在Visual Studio C++ 10和上述
我測試這一點,並行,同時使小計算器....
// Variables :
char * number1 ;
double num1 ;
String^no1 ;
number1 = (char*)Marshal::StringToHGlobalAnsi(no1).ToPointer(); num1 = atof (number1) ;
這不是user2740528的答案嗎?唯一的區別是你將字符串解釋爲浮點數,這與問題無關。 –
可能的重複[如何將系統::字符串^轉換爲常量字符\ *?](http://stackoverflow.com/questions/1098431/how-do-i-convert-a-systemstring-to-const- char) – shf301
首先,你必須知道哪個字符集d編碼你想轉換。您可能希望使用線程的當前「代碼頁」,該代碼頁取決於線程調用的或從其父線程繼承的OS設置,用戶設置和API函數而有所不同。另一種選擇是UTF-8。它廣泛用於Internet和其他操作系統,並且是許多.NET文件功能所使用的默認字符集/編碼。很明顯,因爲你將它傳遞給一個庫函數,所以你需要確保庫可以接受你傳遞的信息。 –
其次,您必須知道本地字符串的生命週期和所有權傳遞的要求。我的猜測是,它可以在塊的末尾被銷燬。如果是這樣,您可以使用自動執行此操作的轉換,否則@ user2740528會在[answer](http://stackoverflow.com/a/19474411/2226988)中省略FreeHGlobal(由@Hans指出) –