导航:
论坛 -> DELPHI技术
斑竹:liumazi,sephil
作者:
2018/9/17 10:42:36
标题:
c++ builder 转delphi xe
浏览:1025
加入我的收藏
楼主:
各位老师:我有一段 c++ builder 的代码,请问怎么转成 delphi xe的 int __fastcall TMainForm::RecBDFPHM(String &result) //根据图片识别数字 { int res = -1; String fn = UpperCase(ExtractFilePath(Application->ExeName)) + "WTKernal.dll"; AddLog(fn); HINSTANCE hRec = LoadLibrary(fn.c_str()); if (hRec){ typedef __stdcall int (*TlpKernalInit)(char *szDictionaryPath); typedef __stdcall int (*TlpRecognizeSingleImage)(char *szImagePath, RECT rcRegion, char *pBuffer, int BufferLen, RECT &rcCell); typedef __stdcall void (*TlpKernalUnInit)(); TlpKernalInit g_lpKernalInit = NULL; TlpRecognizeSingleImage g_lpRecognizeSingleImage = NULL; TlpKernalUnInit g_lpKernalUnInit = NULL; g_lpKernalInit = (TlpKernalInit)GetProcAddress(hRec, "KernalInit"); g_lpRecognizeSingleImage = (TlpRecognizeSingleImage)GetProcAddress(hRec, "RecognizeSingleImage"); g_lpKernalUnInit = (TlpKernalUnInit)GetProcAddress(hRec, "KernalUnInit"); if (g_lpKernalInit != NULL && g_lpRecognizeSingleImage != NULL && g_lpKernalUnInit != NULL) { //Step 1: 初始化 if (g_lpKernalInit(NULL) != 0) { ShowMessage( "初始化失败!"); return res; } //Step 2: 识别指定路径图像 char szBuffer[256] = {0}; RECT rcRegion;//指定待识别的大致范围 rcRegion.left = rcRegion.top = 0; rcRegion.right = 600; rcRegion.bottom = 470; RECT rcSerialNo;//返回的精确坐标 String path = UpperCase(ExtractFilePath(Application->ExeName)) + "smfphm.bmp"; res = g_lpRecognizeSingleImage(path.c_str(), rcRegion, szBuffer, 256, rcSerialNo); AddLog("识别返回结果:" + String(res)); if (0 == res) { result = String(szBuffer); } else { result = String(res); } //Step 3: 释放核心 g_lpKernalUnInit(); }
----------------------------------------------
-
作者:
2018/9/17 10:59:21
1楼:
delphi 送的源码中一堆的 LoadLibrary 使用代码。随便抄,至少能完成前后两部分,中间仅仅是 DLL 函数调用而已。
----------------------------------------------
(C)(P)Flying Wang
作者:
2018/9/17 11:11:20
2楼:
那些参数有些不太明白,还请指导
----------------------------------------------
-
作者:
2018/9/17 13:34:39
3楼:
谁知道你哪里不太明白。。。
----------------------------------------------
delphi 是兴趣,和工作无关,即使它倒闭。又不靠它 delphi 吃饭,怕甚?
作者:
2018/9/17 15:35:23
4楼:
function TForm1.RecBDFPHM(var _result: string): integer; type TlpKernalInit = function(szDictionaryPath: PAnsiChar): integer; stdcall; RECT = TRect; TlpRecognizeSingleImage = function(szImagePath: PAnsiChar; rcRegion: RECT; pBuffer: PAnsiChar; BufferLen: integer; var rcCell: RECT): integer; stdcall; TlpKernalUnInit= procedure ();stdcall; var res: integer; fn: string; // AnsiString hRec: THandle; g_lpKernalInit: TlpKernalInit; g_lpRecognizeSingleImage:TlpRecognizeSingleImage; g_lpKernalUnInit: TlpKernalUnInit; faz:Integer; rcRegion,reSerialNo: TRect; picpath:string; szbuffer:string; begin res := -1; fn := UpperCase(ExtractFilePath(Application.ExeName)) + 'WTKernal.dll'; hRec := LoadLibrary(PChar(fn)); if hRec <> 0 then begin g_lpKernalInit := nil; g_lpRecognizeSingleImage:=nil; g_lpKernalUnInit:=nil; g_lpKernalInit := GetProcAddress(hRec, 'KernalInit'); g_lpRecognizeSingleImage:=GetProcAddress(hRec,'RecognizeSingleImage'); g_lpKernalUnInit:=GetProcAddress(hRec,'KernalUnInit'); faz :=g_lpKernalInit(''); if faz=0 then begin szbuffer:='0'; rcRegion.Left:=0; rcRegion.Top:=0; rcRegion.Right:=640; rcRegion.Bottom:=480; reSerialNo.Left:=0; reSerialNo.Top:=0; reSerialNo.Right:=0; reSerialNo.Bottom:=0; // picpath:=UpperCase(ExtractFilePath(Application.ExeName))+'zp.bmp'; picpath:= ExtractFilePath(Application.ExeName)+'zp.bmp'; //picpath:='d:\abc435.bmp'; res:=g_lpRecognizeSingleImage(PAnsiChar(picpath),rcregion,PAnsiChar(szbuffer),256,reSerialNo); if res=0 then begin result:=StrToInt(szbuffer); end else begin result:=res; end; g_lpKernalUnInit(); end else begin result:=res; end; end; end; 请各位老师指正
----------------------------------------------
-