Привожу часть описания библиотеки (от автора библиотеки):
Добавились новые параметры:
Wnd - это THandle (HWnd) окна или любого другого контрола, который будет обрабатывать сообщения. Введен этот параметр для возможности организовать ProgressBar. Во время выполнения функций посылаются сообщения
SendMessage(Wnd, WM_COPYDATA, 0, LParam(@cd));
где cd: TCopyDataStruct;
В cd.dwData ханится информация о том, сколько kb обработано. При этом максимальное значение прогрессбара должно равняться размеру входного файла. В примере показано, как это работает. Способ конечно не очень, но другого не придумал.
по этому описанию я сделал следующее:
- Код: Выделить всё
Public Const WM_COPYDATA = &H4A
Public OldWndProc As Long
Public Type COPYDATASTRUCT
dwData As Long
cbData As Long
lpData As Long
End Type
Public cd As COPYDATASTRUCT
Function WindowProc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Dim lReturn As Long
lReturn = CallWindowProc(OldWndProc, hwnd, Msg, wParam, lParam)
Select Case Msg
Case WM_COPYDATA
LSet cd = lParam
Debug.Print lParam
Debug.Print "Обработано- "; cd.dwData; " байт"
End Select
WindowProc = lReturn
End Function
На строке LSet cd = lParam происходит вылет из VB, если эту строку закоментить то все проходит, только cd.dwData=0
Пробовал LSet, Set и просто без оператора cd=lParam результат один.
Вот кусок кода демонстрационной программы работы с библиотекой на DELPHI как она перехватывает и извлекает данные из сообщения от DLL и там все работает.
Код на DELPHI:
- Код: Выделить всё
procedure TForm1.WMCopyData(var Msg: TMessage);
var
cd: PCopyDataStruct;
begin
//if Msg.Msg=WM_COPYDATA then
begin
cd := PCopyDataStruct(Msg.LParam);
Progressbar1.Position:=(cd.dwData);
end;
end;
Подскажите как мне взять нужные данные из lParam в VB6?