Форум: "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.033 c