Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.03.20;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.068 c
14-1109612491
default
2005-02-28 20:41
2005.03.20
Теория вер-ей(вопрос к математикам)


4-1105952636
Marser
2005-01-17 12:03
2005.03.20
Опрос COM-порта и потоки


1-1110003011
Эли
2005-03-05 09:10
2005.03.20
проблемы с модальной формой


1-1109783918
oleg_SYS
2005-03-02 20:18
2005.03.20
Как присвоить типу OleVariant адресс процедуры?


6-1105619806
Norny
2005-01-13 15:36
2005.03.20
Простой чат без сервера





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский