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

Вниз

Вопрос о программирование 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 вся ветка

Форум: "WinAPI";
Текущий архив: 2004.11.28;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.034 c
1-1100334175
AlexBragutsa
2004-11-13 11:22
2004.11.28
Для начинающего Делфиста


14-1100034968
Cerberus
2004-11-10 00:16
2004.11.28
Предлогаю альтернотиву


14-1099655916
1008
2004-11-05 14:58
2004.11.28
Где найти нормальный форум для общения?


6-1095849884
Cherepovets
2004-09-22 14:44
2004.11.28
Организация копирование по сети


14-1100164229
TUser
2004-11-11 12:10
2004.11.28
Word





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский