Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.09.2009, 21:54   #11
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Код:
Pchar(@Buffer)
а в конце буфера есть #0?

Код:
TelBase
что за тип?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 21.09.2009 в 21:56.
Пепел Феникса вне форума Ответить с цитированием
Старый 21.09.2009, 22:27   #12
DarkEvil
Форумчанин
 
Аватар для DarkEvil
 
Регистрация: 08.05.2009
Сообщений: 247
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
Код:
Pchar(@Buffer)
а в конце буфера есть #0?
есть

Цитата:
Код:
TelBase
что за тип?
Код:
    TelBase = packed record
      Name : String[20];
      Street : String[30];
      BdNumber : String[5];
      KvNumber : String[4];
      telNumber : String[7];
Мой сайт
Цитата:
Сообщение от Scream In Darkness
Кровь не даёт покоя! Кровь не знает сна!
Кровь бежит на волю – Вены рвёт сама!
DarkEvil вне форума Ответить с цитированием
Старый 21.09.2009, 22:50   #13
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Так. Возможно я ошибаюсь, а может это причуды дельфи.
Значит прототип объявляем в dll так
Код:
bCallback = procedure(const Buffer: Pointer);
А у себя как раз, можно оставить PTelBase, тобиш ^TelBase попробуйте.

Edit
Ну и в коде там замените буфер, вместо array of Char поставте Pointer. Хотя это не суть важно, вроде как, просто для читабильности кода чтоли

И еще, в своей структуре, вы бы заменили например
Код:
String[20]
на
Код:
char[20]
ну или для unicode
Код:
wchar[20]

Последний раз редактировалось BOBAH13; 21.09.2009 в 22:53.
BOBAH13 вне форума Ответить с цитированием
Старый 21.09.2009, 23:00   #14
DarkEvil
Форумчанин
 
Аватар для DarkEvil
 
Регистрация: 08.05.2009
Сообщений: 247
По умолчанию

Цитата:
String[20]

на
Код:

char[20]

ну или для unicode
Код:

wchar[20]
Ну по структуре не столь важно

Цитата:
Значит прототип объявляем в dll так
Код:

Код:
bCallback = procedure(const Buffer: Pointer);
А у себя как раз, можно оставить PTelBase, тобиш ^TelBase попробуйте.
Собственно так и реализовано, завтра уже буду продолжать пляски з бубном
Мой сайт
Цитата:
Сообщение от Scream In Darkness
Кровь не даёт покоя! Кровь не знает сна!
Кровь бежит на волю – Вены рвёт сама!

Последний раз редактировалось DarkEvil; 21.09.2009 в 23:03.
DarkEvil вне форума Ответить с цитированием
Старый 21.09.2009, 23:05   #15
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Вы читали что я писал выше?
Вы хотите решить проблему?
Если нет, то зачем тогда спрашивать.

1. Сделайте бекап своих файлов.
2. Сделайте как я сказал.
3. Отпишитесь то что из этого вышло.

Не ужели сложно ? Может я груб, но просто хочу помочь, а вы отказываитесь.

На счет универсальности, непонял чем Pointer не угадил ? а что касается, того что я упомянул PTelBase, так это со стороны вашего приложения, когда каллбэк из длл вызывается, вы можете сразу указывать не Pointer, а PTelBase, посути одно и тоже с программной точки зрения.
BOBAH13 вне форума Ответить с цитированием
Старый 21.09.2009, 23:35   #16
DarkEvil
Форумчанин
 
Аватар для DarkEvil
 
Регистрация: 08.05.2009
Сообщений: 247
По умолчанию

Я канешно извиняюсь но Вы наверное не заметили что я отредактировал свой пост
Собственно щас у меня все построенно таким образом как Вы говорили.
По прежнему получаю access violation
Розбиратся продолжу завтра "утро вечера мудренее"

Цитата:
Вы читали что я писал выше?
Да, могу выложить полностью исходник либы.

нашол где ошибка вылазит

при вызове чтения файла
Код:
bReadFileEx(Buffer);
вот сама функция
Код:
function bReadFileEx(var Buffer): Boolean;
begin
  Result := ReadFile(bHandle, Buffer, bBlockSize, bRWBlock, nil);
end;
Мой сайт
Цитата:
Сообщение от Scream In Darkness
Кровь не даёт покоя! Кровь не знает сна!
Кровь бежит на волю – Вены рвёт сама!

Последний раз редактировалось Stilet; 22.09.2009 в 15:16.
DarkEvil вне форума Ответить с цитированием
Старый 22.09.2009, 14:43   #17
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Цитата:
Сообщение от DarkEvil Посмотреть сообщение
нашол где ошибка вылазит

при вызове чтения файла
Код:
bReadFileEx(Buffer);
вот сама функция
Код:
function bReadFileEx(var Buffer): Boolean;
begin
  Result := ReadFile(bHandle, Buffer, bBlockSize, bRWBlock, nil);
end;
Buffer - это array of Char, то есть 4 байта, в которых указатель на область памяти. Если надо читать в ту область памяти, то это Buffer[0].
Somebody вне форума Ответить с цитированием
Старый 22.09.2009, 14:53   #18
DarkEvil
Форумчанин
 
Аватар для DarkEvil
 
Регистрация: 08.05.2009
Сообщений: 247
По умолчанию

Спасиба за подсказку
но еще один вопрос
в калбек процедуру мы отправляем указатель на этот буфер
Код:
Callback(@Buffer);
Но собственно в сама процедура получает совершенно иные значения....
З.Ы. Где-то я сильно торможу
Мой сайт
Цитата:
Сообщение от Scream In Darkness
Кровь не даёт покоя! Кровь не знает сна!
Кровь бежит на волю – Вены рвёт сама!
DarkEvil вне форума Ответить с цитированием
Старый 22.09.2009, 15:02   #19
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Я уже запутался в этом множестве кусков кода...
Если функция принимает const Buffer, а буфер - array of Char, то надо передавать Buffer[0].
Если Buffer: Pointer, то @Buffer[0].
А откуда взялось @Buffer? Это указатель на указатель.
Somebody вне форума Ответить с цитированием
Старый 22.09.2009, 15:09   #20
DarkEvil
Форумчанин
 
Аватар для DarkEvil
 
Регистрация: 08.05.2009
Сообщений: 247
По умолчанию

Buffer это Pointer
Код:
bCallback = procedure (const Buffer : Pointer);
Мой сайт
Цитата:
Сообщение от Scream In Darkness
Кровь не даёт покоя! Кровь не знает сна!
Кровь бежит на волю – Вены рвёт сама!
DarkEvil вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Автосохранение исходников в Delphi. Это возможно? Kottik Софт 16 20.09.2009 17:36
Blockread с массивом.Возможно ли это? Ozerich Общие вопросы Delphi 4 05.11.2008 17:19
Это возможно? Shaitan63 Общие вопросы Delphi 24 01.05.2008 22:59
Возможно ли это...? jungo Microsoft Office Excel 7 20.11.2007 00:01