VC++和OCR问题,连接

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VC++和OCR问题,连接相关的知识,希望对你有一定的参考价值。

如上

参考技术A VC6.0建个MFC的Dialog based工程,然后"Project"->"add to project"->"Components and controls",在Registered ActiveX Controls中找到Microsoft Office Document Imaging Viewer Control 11.0,INSERT建立一个类,然后从控件工具箱中拖一个到窗口上,右键classWizard,Member Variables找到IDC_MIDOCVIEW1然后AddVariable变量名为m_MIDOCtrl,然后在你的类里面找到*Dlg.cpp,在最上面写的#import "C:\Program Files\Common Files\Microsoft Shared\MODI\11.0\MDIVWCTL.DLL",路径需要你自己改一下,大多数就是这个路径,然后编译一下,在Debug下能找到MDIVWCTL.tlh,复制到工程文件夹中,在*Dlg.cpp中#include "MDIVWCTL.tlh",然后删除刚刚写的#import...,*Dlg.cpp中添加一个成员函数:

BOOL 这里修改成你的Dlg类名::OCRImage(CString i_csPath, CString &o_Gotten)

BOOL rtn = TRUE; //返回值
HRESULT hr = 0;

IUnknown *pIObj = NULL;
IDocument *IDoc = NULL;
IImages *IImages = NULL;
IImage *IImage = NULL;
ILayout *ILayout = NULL;
IWords *IWords = NULL;
IWord *IWord = NULL;
long numWord=0;

try

pIObj = (IUnknown *) m_MIDOCtrl.GetDocument();
if(!pIObj)

hr = pIObj->QueryInterface(IID_IDocument,(void**) &IDoc);
if ( SUCCEEDED(hr) )

hr = IDoc->OCR(miLANG_SYSDEFAULT,TRUE,TRUE);
if ( SUCCEEDED(hr) )

IDoc->get_Images(&IImages);
IImages->get_Item(0,(IDispatch**)&IImage);
IImage->get_Layout(&ILayout);

ILayout->get_NumWords(&numWord);
ILayout->get_Words(&IWords);

IWords->get_Count(&numWord);

for ( long i=0; i<numWord;i++)

IWords->get_Item(i,(IDispatch**)&IWord);
CString csTemp;
BSTR result;
IWord->get_Text(&result);
char buf[256];
sprintf(buf,"%S",result);
csTemp.Format("%s",buf);

o_Gotten += csTemp;
o_Gotten +=" ";

IWord->Release();
IWords->Release();
ILayout->Release();
IImage->Release();
IImages->Release();

else
rtn = FALSE;

else
rtn = FALSE;
IDoc->Close(0);
IDoc->Release();
pIObj->Release();

else
rtn = FALSE;
pIObj = NULL;
IDoc = NULL;
ILayout = NULL;
IImages = NULL;
IImage = NULL;
IWords = NULL;
IWord = NULL;

catch (...)




return rtn;



怎么调用随便你了,OCRImage(路径,返回识别后的文本) 返回值为FALSE说明识别不成功,TRUE则正功。
参考技术B CreateInstance(__uuidof(Connection)); //创建连接实例
Open(strCnn,"","",adModeUnknown);
strCnn是接连字符串如:Provider=SQLOLEDB;Persist Security Info=False;User ID=sa ;Password=sa ;Initial Catalog=BusSel ;Data Source=aato

vc 6.0连接oracle11g

参考技术A VC++连接远程Oracle数据库

1.如果主机A要连接远程主机B的oracle数据库,那么主机A和主机B都要安装oracle数据库,否则会提示找不到安装程序异常(或者主机A安装oralce客户端程序),主机B要配置数据库本地网络服务名和监听程序,用于对外网络开放本地数据库网络服务和监听远程程序通过网络连接本地数据库。

2.oracle数据库中用到的3个配置程序:Database Configuration Assistant 用于配置oracle数据库,如果安装过程中数据库配置或者安装出错,可以直接删除数据库重新配置不用卸载软件重新安装;Net Configuration Assistant用于配置本机数据库网络监听程序和数据库网络服务名,如果连接提示无法识别提供的sid等错误,可以直接删除监听程序重新配置并同时删除本地网络服务名重新配置;Net Manager用于查看Net Configuration Assistant中配置的本地网络服务名和监听程序;1个数据库连接与操作程序:SQL Plus用于连接数据并实现数据系统配置与数据操作。

3.常用命名:cmd中输入lsnrctl status用于查看当前数据库网络服务与监听程序状态,如果听见程序为BLOCKED状态则远程无法连接,正常为READY状态;如果连接不上远程数据库,可以通过此命令查看服务是否开启;oracle数据库插入时间日期,使用to_date('2013-07-05 23:56:25’, 'yyyy-mm-dd hh24:mi:ss’),设置系统时间日期显示格式:alter session set nls_date_format=‘yyyy-mm-dd hh24:mi:ss’。

4.oracle 11g标准版vc++连接字符串:

strConnect.Format("Provider=OraOLEDB.Oracle.1;Password=%s;Persist Security Info=True;User ID=%s;\
Data Source=\"(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = %s)(PORT = %s)) )(CONNECT_DATA = (SID = %s)))\"",
m_sPwd, m_sUid, m_sHost, m_sPort, m_sSid);//123456 system 192.168.37,1521(默认端口),testdata(本地网络服务配置服务名)

try

::CoInitialize(NULL);//初始化com环境(必须,否则提示异常)
m_pConnection.CreateInstance(__uuidof(Connection));
m_pConnection->ConnectionTimeout = 10;// 设置连接超时10秒
m_pConnection->Open(_bstr_t(LPCTSTR(strConnect)),"","",adModeUnknown);
m_pConnection->CursorLocation = adUseClient;//设置使用客户端连接(可以共享读写)

catch (_com_error e)

AfxMessageBox(e.Description());
//AfxMessageBox(e.ErrorMessage());
return FALSE;

catch(...)

MessageBox("数据库连接失败!", "未知原因", MB_OK|MB_ICONERROR);
return FALSE;
追问

你好,我是学习java的,现在需要做C++开发我没有C++基础,可以发送给我一个完整的代码吗?谢谢了

追答

代码网上很多,可以去下载,这是我自己实际项目中用过整理的。

以上是关于VC++和OCR问题,连接的主要内容,如果未能解决你的问题,请参考以下文章

vc++连接MYSQL数据库

vc中怎么连接SqlServer

VC编译连接选项详解

请教VC如何与MYSQL连接?

切换 VC 后多点连接会话断开

VC_ADO连接SQLSERVER时连接字符串的模式