И снова у меня затык.
И опять по старым чертежам: пробую в Бейсике - всё работает, перекладываю в Делфи - отваливается.
Опишу проблему комментариями в кодах
'VB
Код:
Private Declare Function VBstart Lib "vb.dll" (scope&) As Integer
Private Declare Sub VBstep Lib "vb.dll" (ByVal scope&, ByVal modl$, ByVal step$, ByVal Pars$, ByVal pars2$)
Function Fstart() As Integer
Fstart = VBstart(dllscope)
End Function
Sub Fstep(ByVal modl$, ByVal step$, ByVal Pars$, ByVal pars2$)
If Len(modl) = 0 Then
modl = ""
End If
If Len(step) = 0 Then
step = ""
End If
If Len(Pars) = 0 Then
pars = ""
End If
If Len(pars2) = 0 Then
pars2 = ""
End If
Call VBstep(dllscope, modl, step, pars, pars2)
End Sub
Private Sub Step_Button_Click()
modl = "Test"
step = "Data"
Call Fstart
Call Fstep(modl, step, Pars, pars2)
End Sub
'Pas
Код:
Function Fstart() :integer;
Procedure Fstep(modl : string; step : string; pars : string; pars2 : string);
implementation
Function VBstart(var scope: longint) : integer; stdcall; external 'vb.dll';
Procedure VBstep (var scope: LongInt; modl: string; step: string; pars: string; pars2: string); stdcall; external 'vb.dll';
// функ. запуска сервера.
function Fstart() :integer;
begin
result:= VBstart(dllscope);
end;
// проц. загрузки файла на сервер
Procedure Fstep(modl : string; step : string; pars : string; pars2 : String);
begin
If Length(modl) = 0 Then
begin
modl := '';
End;
If Length(step) = 0 Then
begin
step := '';
End;
If Length(pars) = 0 Then
begin
pars := '';
End;
If Length(pars2) = 0 Then
begin
pars2 := '';
End;
VBstep(dllscope, modl, step, pars, pars2);
end;
procedure TForm1.Step_Click(Sender: TObject);
begin
modl:='Test'; // передаём заведомо известные значения в переменные
step:='Data';
Fstart(); // инициализируем сервер
Fstep(modl, step, pars, pars2); // отправляем Fstep('Test', 'Data','', '')
// ...
// в этом месте находится следующая функция (независимая от состояния сервера),
//которая выдаёт сообщение об ошибке в случае неуспешной
// операции.
end;
Создалось впечатление, что отправляю то ли не то, то ли не туда. Пробовал подсовывать разные типы, но ответ всегда одинаков.
Даже если я буду передавать
Fstep('', '','', '') в таком виде, то по условию сервера мне должен прийти ответ
"FILE NOT FOUND" (моделировал ситуацию в Бейсике), а пока что постоянно вижу только
"ACCESS DENIED" как в случае, если сервер не инициализирован. Хотя после функции
Fstep я продолжаю видеть сервер в состоянии
"Ready"
Использую Delphi7 , Win_XP_32x.