|
我找到易语言版的32位的了,DLL很大 放蓝奏了
https://wwu.lanzoul.com/i0uVg0h0p62b
只是调用时,InitModel (6)已解决,但最终还是不知道怎么转VBA,
Option Explicit
Declare Sub InitModel Lib "C:\ddocr_qs.dll" (ByVal threadnum As Long)
Declare Sub FreeModel Lib "C:\ddocr_qs.dll" ()
Declare Function Identify Lib "C:\ddocr_qs.dll" (ByVal im As Byte, ByVal imlen As Integer) As String
Private Declare Function lstrlenA Lib "kernel32.dll" (ByVal lpString As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (ByVal Destination As Long, ByVal Source As Long, ByVal Length As Long)
Sub main()
Dim path As String, i As Long, pathbase As String
pathbase = "C:\Users\LCB\Desktop"
For i = 1 To 8
path = "C:\Users\LCB\Desktop" & "\pics\" & i & ".png"
Debug.Print (GetStr(path))
Next i
End Sub
'获取识别结果
Function GetStr(path As String)
Dim address, str As String, bytearr() As Byte
'str = Pic2Base64(path)
'bytearr = StrConv(str, vbFromUnicode)
InitModel (6)
Open path For Binary Access Write As #1
Put #1, 1, bytearr
Close #1
address = Identify(bytearr, LOF(bytearr))
GetStr = StringFromPointerA(address)
FreeModel
End Function
'由字符串指针(内存地址)获取字符串
Public Function StringFromPointerA(ByVal pointerToString As Long) As String
Dim tmpBuffer() As Byte
Dim byteCount As Long
Dim retVal As String
byteCount = lstrlenA(pointerToString)
If byteCount > 0 Then
ReDim tmpBuffer(0 To byteCount - 1) As Byte
Call CopyMemory(VarPtr(tmpBuffer(0)), pointerToString, byteCount)
End If
retVal = StrConv(tmpBuffer, vbUnicode)
StringFromPointerA = retVal
End Function
我找了易语言的DLL图给大伙看一下。
|
-
|