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

Вниз

Вопрос о программирование Com- портов   Найти похожие ветки 

 
Submarine   (2004-10-18 09:30) [0]

Доброе утро ! Во многих статьях пишится, что лучше использовать  DLL или VXD (которое идет к софту)для управления этим устройством,низкоуровневым операции чтения/записи портов это уже на крайний случай. Мне как начинающему не совсем понятно, как мне определить какие функции и процедуры написаны в DLL, т.е. как мне использовать DLL не зная процедуры написаные в нем. Есть возможность DLL как-то декомпелировать ?


 
Дмитрий Ботвин   (2004-10-18 13:38) [1]

можно посмотреть список функций, экспортируемых DLL-кой, а вот
декомпилировать не знаю....


 
Submarine   (2004-10-18 14:57) [2]

А как это можно посмотреть этой список???


 
Дмитрий Ботвин   (2004-10-18 15:02) [3]

Я вот так получал:

unit Unit1;

interface

uses
 Windows, SysUtils, Classes,
 Controls, Forms, ImageHlp, Dialogs, Buttons, StdCtrls;

type
 TForm1 = class(TForm)
   PathDLL: TEdit;
   Label4: TLabel;
   PathPlayerSelect: TSpeedButton;
   Label1: TLabel;
   OpenDialog1: TOpenDialog;
   ListBox1: TListBox;
   procedure PathPlayerSelectClick(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

function EnumSymbols(SymbolName: PChar; SymbolAddress, SymbolSize: ULONG;
 Strings: Pointer): Bool; stdcall;
begin
 TStrings(Strings).Add(SymbolName);
 Result := True;
end;

function GetImageFunctionList(const FileName: string; Strings: TStrings):
 Boolean;
var
 Handle: THandle;
 hProcess: THandle;
 VersionInfo: TOSVersionInfo;
begin
 Strings.Clear;
 Result := False;
 SymSetOptions(SYMOPT_UNDNAME or SYMOPT_DEFERRED_LOADS);
 VersionInfo.dwOSVersionInfoSize := SizeOf(VersionInfo);
 if not GetVersionEx(VersionInfo) then Exit;
 if VersionInfo.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS then hProcess := GetCurrentProcessId
 else hProcess := GetCurrentProcess;
 if not SymInitialize(hProcess, nil, True) then Exit;
 try
   Handle := LoadLibraryEx(PChar(FileName), 0, LOAD_LIBRARY_AS_DATAFILE);
   if Handle = 0 then Exit;
   try
     if not SymLoadModule(hProcess, 0, PChar(FileName), nil, Handle, 0) then Exit;
     try
       if not SymEnumerateSymbols(hProcess, Handle, EnumSymbols, Strings) then Exit;
     finally
       SymUnloadModule(hProcess, Handle);
     end;
   finally
     FreeLibrary(Handle);
   end;
 finally
   SymCleanup(hProcess);
 end;
 Result := True;
end;

procedure TForm1.PathPlayerSelectClick(Sender: TObject);
 begin
   if OpenDialog1.Execute then
     begin
       PathDLL.Text:=OpenDialog1.FileName;
       GetImageFunctionList(PathDLL.Text, ListBox1.Items);
     end;
 end;

end.


 
Erik1 ©   (2004-10-18 15:51) [4]

A tdump запустить никак? Вобще есть цалая куча програм для изуения exe и Dll.


 
Submarine   (2004-10-18 16:02) [5]

>Erik1 ©  
Честно говоря, до вчерашнего дня меня не интересовал этот вопрос, поэтому мои познания по извлечению функций из DLL или exe, крайне малы.

> Дмитрий Ботвин  - спасибо, попробую этот способ. Завтра напишу, что получилось


 
DC-AC   (2004-10-19 07:08) [6]

Submarine : если мне не изменяет склероз, то функции CreateFile("COM1",...) и иже с ними как раз и обращаются к serial.vxd/serial.sys. И зачем тебе знать импортируемые функции и т.д. ? Загляни в WinAPI Help, раздел Communication. Или я чего-то недопонял ?


 
Submarine   (2004-10-19 07:35) [7]

> DC-AC  
Просто есть уже программа, АРМ "Орион" она как раз работает с Com-портом, снимает данные с приборов и закладывает в БД написаную на Paradox, я же хочу паралельно снимать данные и записывать в БД Interbase. Вопрос об спользовании DLL, возник в связи со статьями о программирование Com-портов. Из статей, я понял, что если уже есть готовая DLL которая используестся для работы с Com-портом, то лучше использовать ее, а типа не придумывать низкоуровневые операции чтения/записи. В связи с этим то я и задал этот вопрос.


 
DC-AC   (2004-10-19 12:35) [8]

Теперь понятно. Насчёт дизасма dll - это тебе лучше меня ответят другие. Тссс... на хакерских сайтах...
Насчёт работы с приборами - параметры порта (скорость, кол-во бит и пр) и протокол известны ? Связь по RS-232 или RS-485 ?


 
Submarine   (2004-10-19 15:32) [9]

Да все параметры изветны, идет по RS-485 потом через преобразователь RS-232
Даны настройки порта: типа скорость-9600, биты данных-8, четность -нет, стоповые биты-1, управление потоком-нет, Fifo-включено.
Честно говоря несрвсем, еще знаю как использовать эту информацию.
А приборы с которых снимаю информацию C-2000, Сигнал-20 и т.п.
>DC-AC  -судя по вопросу ты с таким уже встечался, если да напиши пожалуста письмо на мыло, вопросов куча....


 
DC-AC   (2004-10-19 16:40) [10]

Нет, с такими приборами не встречался. Но было дело, разбирался в программировании COM-портов. Могу выслать статейку на эту тему. Или используй компоненты для работы с портом, Varian Asynch32, говорят, самый нормальный.
Если ПРОТОКОЛ работы с устройством (данные, которые должны посылаться в порт и как интерпретировать данные, которые принимаются с порта) известен, то можно написать свою библиотеку. Так будет проще.


 
Erik1 ©   (2004-10-19 17:16) [11]

Ну вобщето для вольшего удобства работы я поправил  Varian Asynch32. И служит он мне верой и правдой 4 года. Удаленый сервер управляет com портом, более полугода без перезагрузки. Может и больше, но рекорд установить неудалось, менял версию. Так, что желающим могу выслать измененый Asynch32. Он у меня теперь синхроные функции подерживает в асинхроном режиме, бывает очень нужно.


 
Submarine   (2004-10-20 08:58) [12]

>Erik1 ©   Вышли пожалуста, посмотрю. Только у меня входящая почта огр. размер письма, письмо должно весить не более 1.5 Мб.
>DC-AC  В интернете, много статей, но большинство из них одно и тоже,называеться Работа с COM-портами под Windows, если у тебя другая статейка есть, вышли пожалуста.


 
Erik1 ©   (2004-10-20 10:28) [13]

Компонент выслал. Я убрал возможность регистрации его на палитре компонентов и наследовал от TObject.



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

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

Наверх




Память: 0.5 MB
Время: 0.05 c
1-1100587839
atruhin
2004-11-16 09:50
2004.11.28
Как развернуть окно поверх панели задач.


6-1095751092
Петр
2004-09-21 11:18
2004.11.28
сеть на Delphi


4-1098041108
AlexeyM
2004-10-17 23:25
2004.11.28
перехват вызова Win api в другом приложении


1-1100245286
Rustik
2004-11-12 10:41
2004.11.28
Обработка текстового файла


14-1100284478
Cheater
2004-11-12 21:34
2004.11.28
Граждане! У кого есть Acrobat Reader!