使用第三方库实现QRCode的识别
忘记是不是这个论坛下载的第三方库,搜索库名称倒是没有搜到。不管了,分享给大家再说,别说我抄袭啊。
短短几句代码就可以实现二维码读取,附代码:
程序代码:
SET PATH TO SYS(2003)+"\netqr" SET PROCEDURE TO SYS(2003)+"\netqr\netsuite.reg.prg" m.oNetQR = createobjects( "NetQR.ZxBarcode" ) ?onetqr.readbarcode(GETFILE())
netsuite.reg.prg代码如下:
程序代码:
Clear Local lcPath If _vfp.StartMode = 0 Then m.lcPath = Justpath( _vfp.ActiveProject.Name ) Else m.lcPath = Justpath( sys(16,0) ) Endif Set Default To ( m.lcPath ) *新建一个接口类到的VFP,直接从c++的MFC调用,不用Manifest Procedure Createobjects( ClassName As String , DllPath As String ) If !File("NetQR.dll" ) Then Messagebox("支持库“NetQR.dll”不存在" , 16 ) Return null Endif DECLARE Integer SetClrVersion IN clrhost.dll string DECLARE Integer ClrCreateInstanceFrom IN clrhost.dll string, string, string@, integer@ Local lnDispHandle ; , lcError ; , lnSize ; , loOb m.lcError = Space(512) m.lnSize = 0 SetClrVersion("v4.0.30319") m.lnDispHandle = ClrCreateInstanceFrom( Iif( Empty(m.DllPath ) , Fullpath( "NetQR.dll" ) , Fullpath( m.DllPath ) ), ClassName , @lcError , @lnSize ) *ClassName 注意类名大小写敏感 If m.lnDispHandle < 1 Then m.lcError = Alltrim( Strconv( Strconv( m.lcError , 5 ) , 6 ) ) m.lcError = strtran( m.lcError , Chr( 0 ) , "" ) Messagebox( "实例化类:" + m.ClassName +"出错!原因:" + Chr(13) + m.lcError , 16 ) Return null Else m.loOb = SYS(3096, m.lnDispHandle) SYS(3097, m.loOb) Return m.loOb Endif Endproc *从VFP释放一个接口类,7.28版修正类的引用强回收会崩溃的原因,因为某些接口的异步线程还正在运行; 不可能马上回收,这类就不回收,这样就造成实际接口没有释放。 Procedure UnCreateobjects() DECLARE Integer ClrUnload IN clrhost.dll ClrUnload() Endproc *新建一个接口类到的VFP,需要用Manifest或类注册 Procedure Createobjectf( ClassName As String , Manifest As String ) Local loActCtx ; , loEx ; , loOb Try m.loActCtx = CreateObject("Microsoft.Windows.ActCtx") m.loActCtx.Manifest = Iif( Empty( m.Manifest ) , " , m.Manifest ) m.loOb = m.loActCtx.Createobject( ClassName ) Catch To loEx Endtry If Type( "loEx.Message" ) == "C" Then Messagebox( "实例化类:" + m.ClassName +"出错!原因:" + Chr(13) + m.loEx.Message , 16 ) Return null Else Return m.loOb Endif Endproc
另外还有2个库,请查看附件。
netqr.7z
(110.04 KB)