VB到Delphi的翻译

VB到Delphi的翻译,delphi,vb6,Delphi,Vb6,我正在将VB6代码翻译成Delphi7) 我如何翻译以下内容 函数funcSetupCallBack是在外部in DLL中定义的 Public Declare Function funcSetUpCallBack& Lib "BUICAP32.DLL" (ByVal nEvent&, ByVal CallBackFunction&) 这是在主窗体中调用funcSetupCallBack函数的方式 if ( MICRCallBackYN = true ) //If MIC

我正在将VB6代码翻译成Delphi7)

我如何翻译以下内容

函数funcSetupCallBack是在外部in DLL中定义的

Public Declare Function funcSetUpCallBack& Lib "BUICAP32.DLL" (ByVal nEvent&, ByVal CallBackFunction&)
这是在主窗体中调用funcSetupCallBack函数的方式

if ( MICRCallBackYN = true ) //If MICR call back is turned on in setup screen and using 4120
    then
      begin
        if ( sScannerType = 'DCC BX7200' )
          then
            begin
              Ret := funcSetUpCallBack( TS200_CB_EVENT_MICR, MICRCallBack ); //Turn on MICR Callback
              Ret := BUICSetParam( CFG_SORT_MODE, 8 );
            end;
        if ( sScannerType = 'Teller Scanner Ts440' )
          then
            begin
              Ret := funcSetUpCallBack( TS200_CB_EVENT_VBMICR, MICRCallBack ); //Turn on MICR Callback VB
            end;
        //ibatchitemsCB = 0  '//Initialize Callback item counter to 0 When using the 'Sort Every Fouth Document Logic'
      end
    else
      begin
        Ret := funcSetUpCallBack( TS200_CB_EVENT_VBMICR, 0 ); //Turn off MICR Callback
        Ret := BUICSetParam( CFG_SORT_MODE, 6 );
      end;
这是MICRCallBack函数的定义

Public Function MICRCallBack(ByVal dwReason&) As Long
    Dim Ret As Long, i As Long, iDocument As Long
    Dim j As Integer
    Dim iScannerType As Long
    Dim strMICR As String * 255, ltr As String, tst As String

iDocument = funcTS200GetMICR(strMICR, 100)

    '// Get the MICR
    'iScannerType = BUICGetParam(CFG_MISC_SCANNER_TYPE)

        'Every Fourth Document put in option pocket
'        If ibatchitemsCB > 0 And ibatchitemsCB Mod 4 = 0 Then Ret = funcSetPocket&(1) Else Ret = funcSetPocket&(0)
'        ibatchitemsCB = ibatchitemsCB + 1

        'If Check Upside down put in option Pocket
        If iScannerType = 7200 Then
            Ret = BX7200SetPocket(iDoccument, 0)
            For i = 1 To 10
                ltr = Mid(strMICR, i, 1)
                If Asc(ltr) = 0 Then tst = tst & ltr
            Next i
            If Len(tst) > 5 Then Ret = BX7200SetPocket(iDocument, 1) Else Ret = BX7200SetPocket(iDocument, 0)
        Else
             For i = 1 To 10
                ltr = Mid(strMICR, i, 1)
                If Asc(ltr) = 0 Then tst = tst & ltr
            Next i
            If Len(tst) > 5 Then Ret = TS400SetPocket(1) Else Ret = TS400SetPocket(0)
        End If

    MICRCallBack = 1

End Function        
所以问题是,我如何才能声明一个Delphi函数作为外部DLL中声明的另一个函数的参数


非常感谢您的帮助和时间。

为回调声明函数类型,然后在参数中使用该类型,例如:

type
  SetUpCallBack = function(dwReason: DWORD): Integer; stdcall;

function funcSetUpCallBack(nEvent: Integer; CallBackFunction: SetUpCallBack): Integer; stdcall; external 'BUICAP32.DLL';
然后您可以传入Delphi函数:

function MICRCallBack(dwReason: DWORD): Integer; stdcall;
begin
  // do something...
  Result := 1;
end;

...

Ret := funcSetUpCallBack( TS200_CB_EVENT_MICR, @MICRCallBack ); //Turn on MICR Callback
...
Ret := funcSetUpCallBack( TS200_CB_EVENT_VBMICR, @MICRCallBack ); //Turn on MICR Callback VB
...
Ret := funcSetUpCallBack( TS200_CB_EVENT_VBMICR, nil ); //Turn off MICR Callback

你知道Delphi吗?是的,但我不知道如何声明这种类型的函数调用,所以请阅读文档并试一试。