我刚刚测试了一下这个代码,结果是没有值的。不过经过系统分析,我找到了根本原因!VC++代码如下:
- HObject ho_Image, ho_SymbolXLDs;
- HTuple hv_DataCodeHandle, hv_ResultHandles, hv_DecodedDataStrings;
- ReadImage(&ho_Image, "1.png");
- CreateDataCode2dModel("QR Code", HTuple(), HTuple(), &hv_DataCodeHandle);
- FindDataCode2d(ho_Image, &ho_SymbolXLDs, hv_DataCodeHandle, HTuple(), HTuple(),&hv_ResultHandles, &hv_DecodedDataStrings);
复制代码
这里我测试生成的QR码,内容为:1234567890,经过楼主的方法DecodedDataStrings[0].S()并没有效果,于是分析如下:
HTuple中对字符串进行了改写,和以前的版本有些不一样了,所以可以看到.S()方法返回的数据是HString类型,声明如下:- HString S() const { return (*this)[0].S(); }
复制代码 那么这个HString应该是Halcon内部的字符串类,那么肯定可以转我们标准C++类型的方法,继续查找找到下面方法:
- // Pointer to string data
- const char* Text() const;
复制代码 哈哈,结果出来了,很简单就是这个方法了!赶紧修改原来的代码测试下:
- char* pChText = new char[255];
- memset(pChText, 0x00, 255);
- HString str = hv_DecodedDataStrings.S();
- sprintf_s(pChText, 255, "%s", str.Text());
复制代码
直接写也是可以的
- sprintf_s(pChText, 255, "%s", hv_DecodedDataStrings.S().Text());
复制代码
这回就可以成功进行赋值了!!!
提示:sprintf这个函数不是打印函数,是格式化字符串的函数,打印的是printf!
|