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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.09.2011, 04:50   #1
jhonyxakep
Пользователь
 
Аватар для jhonyxakep
 
Регистрация: 17.04.2010
Сообщений: 20
По умолчанию Перевести кусок кода из C++ в Delphi

Здравствуйте,

Переводил некоторый код с использованием amxAPI с си на делфи,
но никак не могу перевести небольшой кусок кода:

На си C++ выглядит так:
Код:
cell ret, amx_Address,*phys_addr;
amx_PushString(amx,&amx_Address,&phys_addr,message,0,0);
Описание самой функции функция PushString
Код:
amx_PushString(AMX *amx, cell *amx_addr, cell **phys_addr, const char *string, int pack, int use_wchar)
В Делфи варианте API описание функции такое:
Код:
function amxx_PushString(amx: PAmx; amx_addr: Cell; phys_addr: Array of Cell; const str: AnsiString; pack: Integer; use_wchar: AnsiString): Integer; cdecl;
Как правильно повторить код в Delphi?

Пробовал
Код:
var  
amx_Address : Acell;
phys_addr: ACell;
...
amx_PushString(amxx,&amx_Address,&phys_addr,message,0,'');
но насколько понимаю пробовал неправильно получился Access Violation.

Заранее спасибо
Strange Code Generator
jhonyxakep вне форума Ответить с цитированием
Старый 23.09.2011, 16:31   #2
JUDAS
фонатик DELPHI
Форумчанин
 
Аватар для JUDAS
 
Регистрация: 14.01.2008
Сообщений: 714
По умолчанию

1. cdecl в конце функции говорит о том что код не на С++ а на Си
2. для кода на С++ нужно дописывать stdcall;
3. не заметил в описании Вашей функции текста external 'XXX.dll' или LoadLibrary + GetProcAddress в динамическом варианте загрузки.
-----------
По сути
Код:
amx_PushString(AMX *amx, cell *amx_addr, cell **phys_addr, const char *string, int pack, int use_wchar)
должен иметь на Паскале следующий аналог:

type
PAMX = ^TAMX;
TAMX = record;
pcell = ^cell;
cell = record;
ppcell = ^pcell;

Код:
function amx_PushString(amx : PAMX; amx_addr : pcell; phys_addr : ppcell; str: PChar; 
pack,use_wchar : integer):integer; stdcall; external 'ХХХ.dll';
при варианте Си
Код:
function amx_PushString(amx : PAMX; amx_addr : pcell; phys_addr : ppcell; str: PChar; 
pack,use_wchar : integer):integer; cdecl; external 'ХХХ.dll';
95% сбоев и ошибок приложений, находится в полу метрах от монитора

Последний раз редактировалось JUDAS; 23.09.2011 в 16:33.
JUDAS вне форума Ответить с цитированием
Старый 25.09.2011, 08:28   #3
jhonyxakep
Пользователь
 
Аватар для jhonyxakep
 
Регистрация: 17.04.2010
Сообщений: 20
По умолчанию

Функции не импортируются из Dll'ки, они просто описаны в *.pas файлах
Strange Code Generator
jhonyxakep вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Кусок кода не хочет работать. Yagamy Liet Общие вопросы Delphi 31 19.08.2010 11:49
Нужен ли данный кусок кода? iankov PHP 4 23.04.2009 20:49
помогите понять кусок кода Arteom БД в Delphi 7 31.08.2007 08:51
Есть кусок кода komarevsky Общие вопросы Delphi 7 19.07.2007 17:43