ламерский вопрос по delphi
От: Аноним  
Дата: 16.07.05 21:32
Оценка:
Всем привет!

{Есть объявление}
TMyProc = procedure (ID: Cardinal; pPoints: ^Single; Count: Cardinal);
{Здесь выскакивает [Error] Unit1.pas(12): Identifier expected but '^' found}

{Переменная}
var
MyProc: TMyProc;

{Инициализация ф-ей из DLL}
DLLHandle: THandle;
@MyProc := GetProcAddress (DLLHandle, 'MyProc');

{Дальше хочу вызвать ее}
Points: array[1..200] of Single;
MyProc (0, @Points[1], 100);


В чем проблема?
PS: Может у кого есть пример работающего кода как подключать DLL (делалась в C++) к программе на Delphi? Буду очень благодарен!
Re: ламерский вопрос по delphi
От: Softwarer http://softwarer.ru
Дата: 16.07.05 21:39
Оценка:
Здравствуйте, Аноним, Вы писали:

А>В чем проблема?


В том, что механистическое копирование не всегда правильно срабатывает. В отличие от C, паскаль ожидает типом формального параметра идентификатор типа и ничто другое.

Самый простой вариант сделать этот код нормально работающим — объявить как

(.... const Points : Single ...)


Возможно, я бы даже убрал тип и объявил бы просто

(.... const Points ; ...)
Re: ламерский вопрос по delphi
От: MoRMaT Украина mormat.org.ua
Дата: 16.07.05 21:49
Оценка:
Самый простой путь — объявить тип PSingle = ^Single, а потом использовать в объявлении созданный тип.
Пусто
Re: ламерский вопрос по delphi
От: Аноним  
Дата: 16.07.05 23:03
Оценка:
Спасибо, получилось.
Остается вопрос про то, как передать указатель на начало массива, т.к. вылетает Access Volation in DLL...

А>PS: Может у кого есть пример работающего кода как подключать DLL (делалась в C++) к программе на Delphi? Буду очень благодарен!
Re[2]: ламерский вопрос по delphi
От: Softwarer http://softwarer.ru
Дата: 17.07.05 05:28
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Остается вопрос про то, как передать указатель на начало массива, т.к. вылетает Access Volation in DLL...


Указатель на начало массива-то передается вполне правильно, не хуже чем все остальное. Но гложет меня смутное сомнение: DLL, сделанная на C++, вряд ли использует дефолтовую для дельфы register calling convention; надо бы указать cdecl, stdcall или что-нибудь в этом духе.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.