Форум: "Основная";
Текущий архив: 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.037 c