Как в С вызвать функцию из Delphi библиотеки?
В заголовочном файле (header.pas)
определен интерфейс Код:
ControlInterface = interface Как вызвать из C++ Builder я знаю. Мне же нужно вызывать из C без борланда, без плюсов. |
Т.е. Вы хотите чтобы Си "понял" Delphi на уровне исходников? или все же есть dll. C++ Builder имеет компилятор Delphi и большинство его компонентов и модулей именно на делфях сделаны поэтому понимает исходники а вот чистый си не сможет.
|
на с++ будет выглядеть так:
Код:
typedef unsigned long DWORD; Код:
typedef unsigned long DWORD; |
Alan85,
есть dll и заголовочный файл для неё. И C++ Builder правильно понимает это все. Делает что-то типа Код:
__interface ControlInterface; pva, спасибо. Кажись это работает - в структуру я попадаю, но кажись промахиваюсь мимо функций, т.к. результат немного неожиданный. Сейчас поэкспериментирую. И еще, я немного (я думаю, что немного) изменил объявление структуры Код:
typedef struct ControlInterface |
Код:
__interface ControlInterface; |
Наэкспериментировал.
Первые три указателя в структуре указывают на какие-то "системные" функции. Эти "системные" функции имеют вид @System@@IntfAddRef$qqrx45System@%DelphiInterface$t17System@IInterface% Каждой функции в структуре передаётся первым параметром еще и указатель на указатель на структуру (в терминах C++ это this) "указатель на указатель" не опечатка - если в паскале объявлен объект Код:
var Код:
ControlInterface **o; Код:
typedef struct ControlInterface pva, точное описание интерфейса по этому адресу. Это SDK для аудио плейера AIMP. |
AddRef, Release и QueryInterface - это члены класса IUnknown. Советую почитать про технологию COM - тогда станет понятней. Если не вызывать Release, то возможны проблемы с памятью, поэтому рекомендую сделать так:
Код:
typedef struct ControlInterface Код:
struct ControlInterface : IUnknown |
Время: 14:27. |
Время: 14:27.
© OSzone.net 2001-