Структура программирования, программирование, языки программирования, книги программирование На сайте представлена информация про программирование в Интернете и работу  

Создание Диалога
помогите..., когда я принимаю от клиента информацию:
Как получить список компов с Active Directory
Как узнать номер BIOS?, 9х and NT
Автозагрузка, реестр
Как отловить scroll компонента StringGrid.
Как убрать звук при нажатии клавиши Enter, в TDateTimePicker
Кто знает , где есть grid с автофильтром?
БД в Делфи, проблема с BDE
Сканирование портов
Как Вы относитесь к курящим девушкам?
Экспорт функций
TDump.exe
TListBox
Отслеживание кликов по пунктам ТCheckListBox?
listview, цвет...
Навскидку ответите?, задачка на внимательность
ODAC - использование TOraQuery
Как вернуть датасет хранимой процедурой?, См. название
OpenGL
mdb в Delphi, Подключение к базе Access
Как в QuickRep создать отчет состоящий из 2 стр., склеить две страницы потом можно было
Прошу совета!, В какой прог. создать AVI для интерфейса
Кодировки
Запихивание форм в DLL, нужна инфа....
mysql???
Счетчик
Помогите с кодом
hint, но не простой
Как отлаживать ActiveX?
Как поставить русский шрифт в Pascal?, Маленькая проблеммка!..
Слияние массивов
сеть..., сеть....
программы..., как мне узнать ID запущенных программ...
Одна странность
Каким файловым менеждером пользуетесь?, only programmers
Определение дескриптора
Форматирование имени обьекта
Как разрешить ввод только цифр?, Как запретить ввод букв?
Чтение ИНИ-файла?
Поиск файлов, КАК?
Шифрование данных, в ini файлах
Многострочный ввод/вывод
Западлостроение, Для программ шуток под NT
как сделать пробник для порта
Размер шрифта, при выводе текста под углом
Размеры картинки, чтобы всю видно было...
ПОМОГИТЕЕЕЕЕЕ, СОС
ключ. слово assembler
Стрелочные часы через Canavas Формы.
OpenGL & DelphiX, Можно ли...
Как Delphi привязать к Wordy ?
Организация соединения по протоколу SET или SLL
CD-ROM, Блокировка/Разблокировка
Как в буфер обмена запихнуть rtf?, Снова нужна помощь добрых людей
Как Вы относитесь к курящим девушкам?
Crystal Report 8.5 - не работает RTF экспорт
Работа с Active Directory
Нужна информация по QReport., С чего начать?
Путь к EXE, Как узнать путь к программе
Как Вы относитесь к курящим девушкам?
Как по наведению мышки включать анимацию в Animatе, (Если св-ва OnMouseMove у TAnimatе нет)
Список дисков равен списку пунктов меню.
Преобразование типов
Не понятно почему выдает AV!!!, TQRLabel(FindComponent('QR' .....
Video RAM, Определение размера видеопамяти
Как перескакивать с одного Edit в другой по клику?
Программирование удаленный доступ, Программирование удаленный доступ
Delphi+MySql+host
Rave5, Использование Rave 5 на Delphi7

Платные хостинги     Раскрутка сайта     Книги по программированию


Экспорт функций

Только здесь 1000 посетителей на Ваш сайт всего за 3 у.е.!

- помогите, пожалуйста, разобраться с экспортом:unit TcpTable;interfacetypePMIB_TCPROW=^TMIB_TCPROW;//указатель на структуру TMIB_TCPROWTMIB_TCPROW=record  //в описании на C применяется тип DWORD - какой аналог в Delphi?(я пробовал Word)  dwState:Word;     //состояние соединения  dwLocalAddr:Word; //Локальный адресс  dwLocalPort:Word; //Локальный порт  dwRemoteAddr:Word;//Удаленный адресс  dwRemotePort:Word;//Удаленный порт end;PMIB_TCPTABLE=^TMIB_TCPTABLE;//указатель на структуру TMIB_TCPTABLETMIB_TCPTABLE=record  dwNumEntries:Word;     //количество строк в поле table  table:PMIB_TCPROW;//указатель на массив структур типа MIB_TCPROW,   содержащих информацию о TCP-соединениях end;//так описана на С//////////////////////////////////typedef struct _MIB_TCPTABLE{  DWORD dwNumEntries;  MIB_TCPTABLE table[ANY_SIZE];} MIB_TCPTABLE, *PMIB_TCPTABLE;//////////////////////////////////{$EXTERNALSYM GetTcpTable}function GetTcpTable(TcpTable:PMIB_TCPTABLE;buf:PChar;bOrder:Boolean):Word;implementationfunction GetTcpTable;   external 'Iphlpapi.dll' name 'GetTcpTable';end.Компилируется нормально, но при вызове функции происходит самая распространенная ошибка - 'Access Violation' и переходит к окну CPU.

- 1) DWORD - аналог Longword2) Не понятно что ты делаешь, во всяком случае это похоже на импорт, а никак не экспорт, скорее всего надо так:Код unit TcpTable;interfacetype...{здесь ты её родимую объявляешь}function GetTcpTable(TcpTable:PMIB_TCPTABLE;buf:PChar;bOrder:Boolean):Word;external 'Iphlpapi.dll' name 'GetTcpTable';implementationProcedure MyFunction;begin{здесь ты её используешь}  i:=GetTcpTable(g,f,d);end;end.highlightSyntax('delphiYTljZD','delphi');PS. Удивительно что компиллятор пропустил такой кодPPS. Возможно что объявлять надо немного не так, а вот так:function GetTcpTable(TcpTable:PMIB_TCPTABLE;buf:PChar;bOrder:Boolean):Word;stdcall;external 'Iphlpapi.dll' name 'GetTcpTable';Связано это с тем что скорее всего phlpapi.dll написана не на Delphi, если я не прав, тогда надо использовать другую соответствующую директиву.

- Да я имелл ввиду импорт)))) Меня интересует, что означает вот такая записьMIB_TCPTABLE table[ANY_SIZE]; - что за ANY_SIZE(Наскоко я онимаю это размер массива) и как его узнать? Или это динамический массив Я с 'Си' не работал и не знаю обьявления его массивов(((Вызов функции не стал приводить к ошибке после добавления stdcall, но если после этого обратиться к элементу массива то происходит Access Violetion.varmass:PMIB_TCPTABLE;tryNew(mass);GetTcpTable(mass,PChar(mass),False);ShowMessage(IntToStr(mass.MIB_TCPROW[0].dwLocalPort));finallyDispose(mass);end;

- Наверное имеется ввиду открытый массив. Размер его задаётся динамически функцией SetLength, узнать размер массива можно при помощи функции Lenght

- Что-то ты эту структуру странно перевел. Если на С она выглядит так:typedef struct _MIB_TCPTABLE{ DWORD dwNumEntries; MIB_TCPTABLE table[ANY_SIZE];} MIB_TCPTABLE, *PMIB_TCPTABLE;то в паскале ее следует записать так:TMIB_TCPTABLE=packed record  dwNumEntries:LongWord;    table:array [0..ANY_SYZE] of TMIB_TCPTABLE;end;Хотя про packed с уверенностью не скажу - незнаю как выравневается исходная структура, но скорее всего так. ANY_SIZE скорее всего имя макроса, в крайнем случае - константа. В любом случае это определенное число.Можно член table сделать и указателем, но тогда не забывай выделять память под него. И открытый массив тоже подойдет - он тоже указатель, но опять же память выделять надо.

- Вот поетому я и задал вопрос про ANY_SIZE, поскольку не знал как нада етот код перевести на Delphi. Спасибо за оказанную помощ.

- И все таки это все не хочет работать(((. Что сдесь может быть не так? Начну сначала и попорядку;функция GetTcpTable предназначена для получении информации о таблице TCP-соединений(описание на C):DWORD GetTcpTable(    PMIB_TCPTABLE pTcpTable,    PDWORD pdwSize,    BOOL bOrder);Параметр pTcpTable - указатель на буфер MIB_TCPTABLE, в который будет помещена информация о TCP-соединениях. Параметр pwdSize - указатель на переменную, задающую размер буфера. Если размер буфкра не достаточно большой, то функция передаст в этом параметре требуемый размер. Параметр bOrder указывает, нужно ли сортировать информацию.///////////////////////////////////////////////////////////////////Я описал так:function GetTcpTable(TcpTable:PMIB_TCPTABLE;Size:PChar;bOrder:Boolean):LongWord;stdcall;///////////////////////////////////////////////////////////////////Возвращаемая структура MIB_TCPTABLE имеет вид:typedef struct _MIB_TCPTABLE{  DWORD dwNumEntries;  MIB_TCPROW table[ANY_SIZE];} MIB_TCPTABLE, *PMIB_TCPTABLE;Она содержит следующие поля:dwNumEntries - количество строк в поле table;table - указатель на массив структур типа MIB_TCPROW, содержащих информацию о TCP-соединениях.////////////////////////////////////////Я описал так:PMIB_TCPTABLE=^TMIB_TCPTABLE;TMIB_TCPTABLE=packed record  dwNumEntries:LongWord;  table:array[0..64] of TMIB_TCPROW; end;////////////////////////////////////////Структура MIB_TCPROW содержит информацию о парах IP-адресов, образующих соединение:typedef struct _MIB_TCPROW{ DWORD dwState; DWORD dwLocalAddr; DWORD dwLocalPort; DWORD dwRemoteAddr; DWORD dwRemotePort;} MIB_TCPROW, *PMIB_TCPROW;эта структура содержит следующие поля;dwState - состояние данного TCP-соединения.dwLocalAddr - локальный IP-адрес данного соединения;dwLocalPort - локальный порт данного соединения;dwRemoteAddr - внешний IP-адрес данного соединения;dwRemotePort - внешний порт данного соединения;////////////////////////////////////////я описал так:PMIB_TCPROW=^TMIB_TCPROW;TMIB_TCPROW=record  dwState:LongWord;  dwLocalAddr:LongWord;  dwLocalPort:LongWord;  dwRemoteAddr:LongWord;  dwRemotePort:LongWord; end;////////////////////////////////////////импорт:function GetTcpTable(TcpTable:TMIB_TCPTABLE;Size:PChar;bOrder:Boolean):LongWord;stdcall;external 'Iphlpapi.dll' name 'GetTcpTable';При вызове функции ошибок нет, но она ни чего не возвращает(((((Пожалуйста, подскажите где я ошибся.

- А может так:Type  PDWord=^Longword;...function GetTcpTable(TcpTable:PMIB_TCPTABLE;Size:PDWord;bOrder:Integer):LongWord;stdcall;external 'Iphlpapi.dll' name 'GetTcpTable';И как ты ее вызываешь. И нет ли способа узнать что за ошибка возвращается?

- Вот так вызываю, но ни каких результатов:m:PMIB_TCPTABLE;p:PDWord;begintry New(m); New(p); p^:=SizeOf(m); GetTcpTable(m,p,False); ShowMessage(IntToStr(m.table[0].dwState));//сдесь возникает Access Violetionfinally Dispose(p); Dispose(m);end;

- Ты уверен, что надо передавать размер указателя? Это всего 4 байта.Цитата ShowMessage(IntToStr(m.table[0].dwState));//сдесь возникает Access VioletionА надо так:ShowMessage(IntToStr(m^.table[0].dwState)); //зсдесь его не будет

- Все равно происходит Access Violetion:varm:PMIB_TCPTABLE;ps:PDWord;begintry New(m); New(ps); ps^:=SizeOf(TMIB_TCPTABLE); GetTcpTable(m,ps,False); ShowMessage(IntToStr(m^.table[0].dwState));finally Dispose(ps); Dispose(m);end;

- Ладно, значит, наверное, статические массивы там не так храняться. Поторобуй так:Код TMIB_TCPTABLE=record dwNumEntries:LongWord; table:array of TMIB_TCPROW;end;varm:PMIB_TCPTABLE;ps:PDWord;begin  try     New(m);     SetLength(m^.table,64);     New(ps);     ps^:=SizeOf(TMIB_TCPTABLE);     GetTcpTable(m,ps,False);     ShowMessage(IntToStr(m^.table[0].dwState));  finally     Dispose(ps);     SetLength(m^.table,0);       Dispose(m);   end;highlightSyntax('delphiODA5ND','delphi');или так:Код TMIB_TCPTABLE=record dwNumEntries:LongWord; table:PMIB_TCPROW;end;varm:PMIB_TCPTABLE;ps:PDWord;begin  try     New(m);     GetMem(m^.table,SizeOf(TMIB_TCPROW)*64);     New(ps);     ps^:=SizeOf(TMIB_TCPTABLE);     GetTcpTable(m,ps,False);     ShowMessage(IntToStr(m^.table[0].dwState));  finally     Dispose(ps);     FreeMem(m^.table);       Dispose(m);   end;highlightSyntax('delphiWJlYjgz','delphi');

- При таком варианте ошибки нету только в элементе массива с индексом 0 и возвращаемые данные dwNumEntries неправильные!

- Вот я нашел код на 'С':// Get the table of TCP endpoints // dwSize = 0; error = GetTcpTable( NULL, &dwSize, TRUE ); if( error != ERROR_INSUFFICIENT_BUFFER ) { printf("Failed to snapshot TCP endpoints.\n"); PrintError( error ); return -1; } tcpTable = (PMIB_TCPTABLE) malloc( dwSize ); error = GetTcpTable( tcpTable, &dwSize, TRUE ); if( error ) { printf("Failed to snapshot TCP endpoints.\n"); PrintError( error ); return -1; }

- tcpTable = (PMIB_TCPTABLE) malloc( dwSize );Как это можно перевести в Дельфи?

Интернет казино     Онлайн игры     Увеличение члена     Купить DVD


Главная страница | opengl программирование | программирование бейсик | программирование интерфейса | программирование pocket | программирование заказы | задача динамического программирования | prolog программирование | стохастическое программирование | процедурное программирование | история языков программирования | структура программирования | языки программирования высокого уровня | программирование устройств | функции программирования | программирование siemens | списки программирование | язык программирования java | олимпиада программирование | программирование мобильных телефонов | дипломная работа программирование | программирование palm | Ссылки

Все про процедурное программирование