Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.03.20;
Скачать: CL | DM;

Вниз

как симитировать работу программы - программа управлениия   Найти похожие ветки 

 
aha   (2005-03-05 19:41) [0]

некоторым обьектом ( плата находится в компе в pci шине ) . Для управления программа использует DLL. То есть при разработке программы на другом компьютере поялвяется ошибка-- приложению не удалось запуститься - ХХХХ.dll не найден. ПРиходится в программе куски программы для обращения этой платы временно отключать - не очень удобно . Можно ли как то создать хотя бы пустую dll, которая бы ничего не делала бы , но позволяла программе функционировать ?


 
Anatoly Podgoretsky ©   (2005-03-05 19:58) [1]

Зачем пустую, есть же рабочая, только будь добр поместить ее туда где используешь. Или в крайнем случае сделай заглушки функций в своей программе.


 
aha   (2005-03-05 20:02) [2]

без платы управления и dll не помогает , а можно поподробнее про заглушки - я про них скорее всего и имел ввиду , чтобы быстро можно было бы переделать ...


 
Anatoly Podgoretsky ©   (2005-03-05 20:04) [3]

unit FalseDll;
 объявление всех необходимых функций пустых или иммитаторов, не важно.
end;

В любой момент вместо FalseDll включаешь TrueDll, можно через директивы компилятора.


 
GuAV ©   (2005-03-05 20:38) [4]

Проще написать пустую DLL

File->New->Other...->DLL Wizard

и описать все ф-ции заглушки и экспортировать их.


 
Anatoly Podgoretsky ©   (2005-03-05 20:42) [5]

GuAV ©   (05.03.05 20:38) [4]
ДЛЛ или модуль без разницы, в случае модуля очено быстро переходить от работчей к тестовой версии и упростит отладку. Хотя не затруднит и с ДЛЛ.


 
GuAV ©   (2005-03-05 20:51) [6]

с DLL ещё проще, просто перенести даже без перекомпиляции.


 
Набережных С. ©   (2005-03-05 21:03) [7]


> GuAV ©   (05.03.05 20:51) [6]

Т.е. менять ДЛЛ на диске проще, чем закомментировать/раскомментировать одну директиву? Ну, как говорится, о вкусах не спорят...


 
aha   (2005-03-05 21:17) [8]

а все таки где можно пример посмотреть , я с длл никогда не работал , даже создать не умею ....(((


 
GuAV ©   (2005-03-05 21:28) [9]

File->New->Other...->DLL Wizard

Пишешь требуемые функции.

потом экпортируешь их
exports + F1


 
Anatoly Podgoretsky ©   (2005-03-05 21:31) [10]

Набережных С. ©   (05.03.05 21:03) [7]
Зачем что то комментировать?
А директивы условной компиляции на что?

GuAV ©   (05.03.05 20:51) [6]
А с учетом aha   (05.03.05 21:17) [8] этого?


 
Anatoly Podgoretsky ©   (2005-03-05 21:44) [11]

Во всяком случае тебе дали два рабочих варианта, остальное от вкуса.


 
aha   (2005-03-05 21:47) [12]

пасибо , попробую ...


 
Defunct ©   (2005-03-06 02:07) [13]

Я в таких случаях поступаю так.
Пишу интерфейсный модуль, при инциализации пытаюсь подключить dll динамически, если не получается, то инициализирую все функции интерфейса пустышками и устанавливаю флажек, что библиотека не загружена.

пример:

допустим есть библиотека "devicex.dll" с функциями
function GetDeviceStatus:TDevStatus;stdcall;
function DeviceReady:boolean;stdcall;
function GetDeviceData:TDevDataStruct;stdcall;

создаем интерфейсный модуль:

unit DeviceXInterface;

interface

const DLLName = "devicex.dll";

type

 TQueryFunct = function:boolean;stdcall;
 TStatusFunct = function:TDevStatus;stdcall;
 TDataFunct = function:TDevDataStruct;stdcall;

var
 DeviceXReady     : TQueryFunct;
 DeviceXGetStatus : TStatusFunct;
 DeviceXGetData   : TDataFunct;

 DeviceXInterfaceLoaded : boolean = false;

implementation

uses SysUtils, Windows, Dialogs;

var
  HDll : Cardinal = 0;

function  EmptyQueryFunct:boolean;stdcall;
begin
end;

function EmptyStatusFunct:TDevStatus;stdcall;
begin
end;

function EmptyDataFunct:TDevDataStruct;stdcall;
begin
end;

procedure SetEmptyFuncts;
begin
 DeviceXReady := EmptyQueryFunct;
 DeviceXGetStatus := EmptyStatusFunct;
 DeviceXGetData := EmptyDataFunct;

 DeviceXInterfaceLoaded := False;
end;

procedure LoadInterface;
begin
 if HDll = 0 then
    HDll := LoadLibrary( DLLName );

 if HDll <> 0 then
    try
       DeviceXReady := GetProcAddress(Hdll, "DeviceReady");
       DeviceXGetStatus := GetProcAddress(Hdll, "GetDeviceStatus");
       DeviceXGetData := GetProcAddress(Hdll, "GetDeviceData");
       
       DeviceXInterfaceLoaded := True
    except
       on E:Exception do
        begin
           SetEmptyFuncts;
           ShowMessage(E.Message)
        end
    end
 else
    SetEmptyFuncts;

end;

procedure FreeInterface;
begin
 try
   SetEmptyFuncts;
   if HDll <> 0 then
      begin
        FreeLibrary( HDll );
        HDll := 0
      end
 except
   on E:Exception do ShowMessage(E.Message);
 end
 
end;

initialization
  LoadInterface;

finalization
  FreeInterface;

end.


 
Defunct ©   (2005-03-06 02:13) [14]

ps: вместо пустышек, можно написать эмулирующие device функции.


 
Набережных С. ©   (2005-03-06 05:39) [15]


> Anatoly Podgoretsky ©   (05.03.05 21:31) [10]

А чтобы они заработали нужно вставить/убрать $define что-то, или в опциях, но это уж на вкус. Нет? Может есть другой способ условной компиляции, которого я не знаю?



Страницы: 1 вся ветка

Текущий архив: 2005.03.20;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.052 c
14-1109263189
JaVa73
2005-02-24 19:39
2005.03.20
Мюзикл Moulin Rouge


3-1108914389
Xan
2005-02-20 18:46
2005.03.20
Сохранение SQL запроса в файл


3-1108966665
Ann
2005-02-21 09:17
2005.03.20
Распечатка структуры таблиц Paradox


14-1109833913
MBo
2005-03-03 10:11
2005.03.20
Четверговые задачки


8-1102006537
Stiv
2004-12-02 19:55
2005.03.20
формат tga