Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Access Violation при выходе из процедуры, DLL на С 
:(
    Опции темы
RinOSpro
Дата 7.4.2009, 15:55 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Есть библиотека написанная на С. Есть файл содержащий описание вызываемых функций:
Код

...
  extern "C" unsigned long CreateInstance(const char* strPortAddress, int commsID);
  extern "C" unsigned long GetCommsIDByInstance(unsigned long instanceID);
...


Я его вот так перевел на Delphi:
Код

...
  function CreateInstance(const strAddress: PChar; commsID: Integer): Cardinal; stdcall;
  function GetIDByInstance(instanceID: Cardinal): Cardinal; stdcall;
...


Процедуры отрабатывают правильно. Возвращают результаты.
Код


function Connect(AAddress: string; ACommsID: Integer = 0): Integer;
begin
  Result := CreateInstance(PChar(AAddress), ACommsID);

  if Boolean(Result) then
    Result := GetIDByInstance(Result);
  // но при выходе из это процедуры происодит Access Violation
end;



Подскажите пожалуйста где ошибка?
  Вверх
Rrader
  Дата 7.4.2009, 16:00 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Inspired =)
***


Профиль
Группа: Экс. модератор
Сообщений: 1535
Регистрация: 7.5.2005

Репутация: 70
Всего: 191



Имхо тут cdecl вместо stdcall


--------------------
Let's do this quickly!
Rest in peace, Vit!
PM MAIL Skype   Вверх
RinOSpro
Дата 7.4.2009, 16:16 (ссылка)    |    (голосов: 1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











хм... исправил вроде работает... спасибо smile
  Вверх
bems
Дата 7.4.2009, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 31
Всего: 88



Цитата(RinOSpro @  7.4.2009,  15:55 Найти цитируемый пост)
if Boolean(Result) then
Это потенциальная проблема. В данном случае ничего страшного, но лучше сравнить с нулем



--------------------
Обижено школьников: 8
PM MAIL   Вверх
RinOSpro
Дата 8.4.2009, 09:04 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата(bems @  7.4.2009,  17:33 Найти цитируемый пост)
Это потенциальная проблема. В данном случае ничего страшного, но лучше сравнить с нулем


Так по моему если (Result < 0) то Boolean(Result) = false иначе true.
  Вверх
Rrader
  Дата 8.4.2009, 10:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Inspired =)
***


Профиль
Группа: Экс. модератор
Сообщений: 1535
Регистрация: 7.5.2005

Репутация: 70
Всего: 191



Нет, Boolean(Result) = False, если Result = 0 и равен True во всех остальных случаях.
Код

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage(BoolToStr(Boolean(-1), True));
end;



--------------------
Let's do this quickly!
Rest in peace, Vit!
PM MAIL Skype   Вверх
RinOSpro
Дата 8.4.2009, 12:21 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Очипятка smile "(Result <= 0) "
  Вверх
bems
Дата 8.4.2009, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 31
Всего: 88



да. Но Boolean(1) <> Boolean(2), хотя при этом Boolean(1) = True и Boolean(2) = True.

Однажды написав такое приведение я долго потом пытался понять почему a <> b, где и а и бэ истины.


--------------------
Обижено школьников: 8
PM MAIL   Вверх
THandle
  Дата 8.4.2009, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 65
Всего: 372



Про Boolean'ы хорошо, ИМХО, сказал товарищ CodeMonkey:

http://forum.vingrad.ru/index.php?showtopi...t&p=1758030
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0615 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.