Показать сообщение отдельно
  #11  
Старый 03.01.2018, 00:34
Olstgel Olstgel вне форума
Прохожий
 
Регистрация: 16.12.2017
Сообщения: 9
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

И снова у меня затык.
И опять по старым чертежам: пробую в Бейсике - всё работает, перекладываю в Делфи - отваливается.
Опишу проблему комментариями в кодах
'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.
Ответить с цитированием