Проблема в midas DELPHI 7.1
От: Glasunov  
Дата: 23.06.04 11:48
Оценка:
Описание проблемы.


1. Создать проект сервер с одним методом:


function TDelphiUpdDM.Test(var Server: OleVariant; out Error: WideString): WordBool; begin
  Result := True;
end;


2.Создать проект клиент с вызовом метода.


procedure TfmDelphiUpd.Button1Click(Sender: TObject);
var
  Err: String;
  D: OleVariant;
begin
  DCOMConnection.Connected := True;
  D := ClientDataSet1.AppServer;


  if DCOMConnection.AppServer.Test(D, Err) then
    ShowMessage('Success!')
  else
    ShowMessage('Failed: ' + Err);
end;


Идея передачи свойства AppServer класса TClientDataSet, как переменной заимствована у Дэна Мизера из Essential Midas Pack.

3. Сервер и клиент должны быть на разных компьютерах.

Если на клиенте был установлен midas.dll

— выполняем
   regsvr32 -u <path2midas>\midas.dll

— удаляем целиком ключ системного реестра, если он присутствует.
  HKEY_CLASSES_ROOT\TypeLib\{83F57D68-CA9A-11D2-9088-00C04FA35CFA}

4. на сервере регистрируем наш сервер, запуская его

Если у нас на клиенте midas.dll от D7 то пример при вызове метода сервера будет работать, если от D7.1, то нет, будет выдано сообщение об ошибке EOleSysError inteface not supported:

Запуск клиента с midas 7.0 создает ключ реестра
  HKEY_CLASSES_ROOT\TypeLib\{83F57D68-CA9A-11D2-9088-00C04FA35CFA}

а клиента с midas.dll от 7.1 — нет.

В случае, если указанный ключ был создан старой версией,
при при замене старой версии на новую, сообщения об ошибке нет. Запуск сервера на клиентской машине также создаёт на ней соответсвующую ветку реестра и проблема не определяется.

Демонстрационный пример имеется.

Что делать и кто виноват?

С уважением
Антон Глазунов
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.