#delphi #vb6
#delphi #vb6
Вопрос:
Я перевожу код VB6 на Delphi 7)
Как я могу перевести следующее
Функция funcSetupCallBack определена во внешней in DLL
Public Declare Function funcSetUpCallBackamp; Lib "BUICAP32.DLL" (ByVal nEventamp;, ByVal CallBackFunctionamp;)
Вот как вызывается функция 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 dwReasonamp;) 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 = funcSetPocketamp;(1) Else Ret = funcSetPocketamp;(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 amp; 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 amp; ltr
Next i
If Len(tst) > 5 Then Ret = TS400SetPocket(1) Else Ret = TS400SetPocket(0)
End If
MICRCallBack = 1
End Function
Итак, вопрос в том, как я могу объявить функцию Delphi в качестве параметра для другой функции, объявленной во внешней DLL?
Большое спасибо за вашу помощь и ваше время.
Комментарии:
1. Вы уже знаете какой-нибудь Delphi?
2. Да, но я не знаю, как объявить вызов функций этого типа
3. Итак, прочитайте документацию и приступайте.
Ответ №1:
Объявите тип функции для обратного вызова, а затем используйте этот тип в параметре, например:
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