标题:求助,大神帮忙看下有难度的VB回调,来自VC的dll
只看楼主
Crazyzhu
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2013-7-5
结帖率:0
已结贴  问题点数:20 回复次数:6 
求助,大神帮忙看下有难度的VB回调,来自VC的dll
函数原型是:extern BOOL __stdcall voRegisterMrzCallback(voDataCallback Callback, LPVOID Parameter);这是回调
给的vc源码是:
voRegisterMrzCallback(MRZDataCallback, this);
void WINAPI MRZDataCallback(LPVOID Parameter, VIDEOOCRMRZDATA *pData)
{
    // convert the void parameter back into a this pointer
    CMFCDemoDlg *pThis = (CMFCDemoDlg *)Parameter;
    // now take the unicode string & convert back to be displayed
    CString Display;
    Display.Format("%ws", pData->RawMRZ);
    // store the raw MRZ data in to the dialog class & force a display update
    pThis->MRZ = Display;
    if (pThis->hRFIDPicture)
    {
        DeleteObject(pThis->hRFIDPicture);
        pThis->hRFIDPicture = NULL;
    }
    if (pThis->hBitmap)
    {
        DeleteObject(pThis->hBitmap);
        pThis->hBitmap = NULL;
    }
}
我自己写的是:
Private Type VIDEOOCRMRZDATA
  RawMRZ As Long
  DocumentNumber As String
  DOB As String
  Expiry As String
  Issuer As String
  Nationality As String
  LastNames As String
  FirstNames As String
  Type1 As String
  Discretionary1 As String
  Discretionary2 As String
  Gender As String
End Type
Public Declare Function voRegisterMrzCallback Lib "C:\Documents and Settings\Administrator\桌面\VB工程\OCR_test1\VideoOCR.dll" (ByRef lpCallback As Long, ByVal parameter As Any) As Long

call voRegisterMrzCallback(AddressOf Callback, parameter1)
Function Callback(ByVal parameter As String, pData As VIDEOOCRMRZDATA)
astr = pData.Nationality
MsgBox "callback"
Callback = 1
End Function
(其实我就想获取pData里的数据)求高手看看哪里有问题,已运行系统就崩溃,谢谢,我的积分不多,有的话全给了。

[ 本帖最后由 Crazyzhu 于 2013-7-27 09:15 编辑 ]
搜索更多相关主题的帖子: convert store 
2013-07-27 08:35
Crazyzhu
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2013-7-5
得分:0 
为什么只有路过没人回复呢,我是新手,大家多多指教
2013-07-27 09:11
bczgvip
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:66
帖 子:1310
专家分:5312
注 册:2009-2-26
得分:20 
问题很多呃。
void WINAPI MRZDataCallback(LPVOID Parameter, VIDEOOCRMRZDATA *pData)
VIDEOOCRMRZDATA 的原型呢?Parameter 你确定是字符型么?
2013-07-27 17:58
Crazyzhu
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2013-7-5
得分:0 
回复 3楼 bczgvip
原型是
typedef struct VO_DLL_EXP __VIDEOOCRMRZDATA
{
    BSTR RawMRZ;
    BSTR DocumentNumber;
    BSTR DOB;
    BSTR Expiry;
    BSTR Issuer;
    BSTR Nationality;
    BSTR LastNames;
    BSTR FirstNames;
    BSTR Type;
    BSTR Discretionary1;
    BSTR Discretionary2;
    BSTR Gender; // added 130810

} VIDEOOCRMRZDATA, *PVIDEOOCRMRZDATA;这个忘记写了
还是那个Parameter我也不知道是什么类型,我原来用的是long型,好像也不行,请帮忙,谢谢
2013-07-27 18:18
bczgvip
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:66
帖 子:1310
专家分:5312
注 册:2009-2-26
得分:0 
call voRegisterMrzCallback(AddressOf Callback, parameter1)
parameter1 是什么类型的?

Private Type VIDEOOCRMRZDATA
全改成long。
2013-07-28 16:48
Crazyzhu
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2013-7-5
得分:0 
回复 5楼 bczgvip
问题解决了
Public Declare Function voRegisterMrzCallback Lib "C:\Documents and Settings\Administrator\桌面\VB工程\OCR_test1\VideoOCR.dll" (ByVal parameter As Long, ByRef lpCallback As Long) As Long
这样就行,我百思不得其解,好像和入栈方式有关,还请不吝赐教。
2013-07-28 20:51
bczgvip
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:66
帖 子:1310
专家分:5312
注 册:2009-2-26
得分:0 
囧了,BSTR 和 vb6 string 是同一类型,原来能通用么。。。
2013-07-29 17:09



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-418037-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.313688 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved