вызов dll

Общие вопросы программирования, алгоритмы и т.п.

Модератор: Модераторы

вызов dll

Сообщение danya » 24.09.2010 15:03:05

здравствуйте.
подскажите пожалуйста что почитать по работе с dll
есть библиотека написанная на С
мне нужно выполнить её вызов и в дальнейшем работать с её функциями
сама библиотека и её исходники находятся тут
danya
незнакомец
 
Сообщения: 9
Зарегистрирован: 24.09.2010 14:58:53

Re: вызов dll

Сообщение Nik » 24.09.2010 15:30:28

Один из вариантов - статический вызов функций.

В секции interface пишете что-то вроде этого:

function FunctionFromDll(parametr: string): integer; external 'MyDll';


Далее пользуетесь функцией как обычной.
Аватара пользователя
Nik
энтузиаст
 
Сообщения: 573
Зарегистрирован: 04.02.2006 00:08:09
Откуда: Киров

Re: вызов dll

Сообщение danya » 24.09.2010 16:02:49

ок спасибо это я понял теперь
но мне нужно подключить длл и выполнить сначала одну функцию а затем уже вторую:
BOOL WINAPI SSQ_SetGameServer(char* address);
DWORD WINAPI SSQ_Ping();
danya
незнакомец
 
Сообщения: 9
Зарегистрирован: 24.09.2010 14:58:53

Re: вызов dll

Сообщение stikriz » 24.09.2010 16:11:16

danya писал(а):но мне нужно подключить длл и выполнить сначала одну функцию а затем уже вторую:

Ну, если предыдущее опнятно, то в чем проблема объявить и вторую функцию рядом на следующей строчке?
Аватара пользователя
stikriz
энтузиаст
 
Сообщения: 612
Зарегистрирован: 15.03.2006 09:37:47

Re: вызов dll

Сообщение danya » 24.09.2010 16:36:52

ну дело в том что появились сомнения :)
ведь вторая функция выполняется только после первой
danya
незнакомец
 
Сообщения: 9
Зарегистрирован: 24.09.2010 14:58:53

Re: вызов dll

Сообщение Nik » 24.09.2010 19:19:00

Объявление никак не связано с последующими вызовами. Все нужные функции объявляются в одном месте, а потом уж используйте хоть оптом, хоть в розницу :)
Аватара пользователя
Nik
энтузиаст
 
Сообщения: 573
Зарегистрирован: 04.02.2006 00:08:09
Откуда: Киров

Re: вызов dll

Сообщение danya » 24.09.2010 19:27:32

хорошо :)
тогда последний вопрос)
в документации к библиотеке написано:
DWORD WINAPI SSQ_Ping();
то бишь как я понял переменная типа dword как её преобразовать для вывода в TLabel
при выводе говорит что ожидается TTranslateString, но ничего вразумительного найти не могу
danya
незнакомец
 
Сообщения: 9
Зарегистрирован: 24.09.2010 14:58:53

Re: вызов dll

Сообщение Nik » 24.09.2010 23:41:00

DWORD, если мне память не изменяет, это целочисленный тип. Должно помочь преобразование IntToStr.

при выводе говорит что ожидается TTranslateString

При выводе куда?

Добавлено спустя 2 минуты 12 секунд:
Вообще у вас что-то типа этого должно получиться:

Код: Выделить всё
procedure SSQ_Ping: integer; external 'MyDll';

...

var
x: integer;
begin
x:=SSQ_Ping;
xLabel.Caption:=IntToStr(x);
end;
Аватара пользователя
Nik
энтузиаст
 
Сообщения: 573
Зарегистрирован: 04.02.2006 00:08:09
Откуда: Киров

Re: вызов dll

Сообщение danya » 25.09.2010 12:28:52

спасибо что-то типо этого и было у меня но ошибки были :)
теперь функция возвращает значение -1 т.е. всё хорошо
не поможете теперь со следующим??
Код: Выделить всё
BOOL WINAPI SSQ_SetGameServer(char* address);
Parameters

[in]address
   The address of the game server to set. Can be a numerical address with port or a hostname address with port in the form "127.0.0.1:27015" or "localhost:27015".

Return Values

If the function succeeds the return value is TRUE.

If the function fails the return value is FALSE.


объявил функцию
Код: Выделить всё
function SSQ_SetGameServer(address:string):boolean;
external 'SSQ';

затем делаю вызов
Код: Выделить всё
var ping_success:boolean;
begin
ping_success:=SSQ_SetGameServer('217.198.1.76:27038');

но из-за этого кода прога падает с ошибкой Acess Vialation
danya
незнакомец
 
Сообщения: 9
Зарегистрирован: 24.09.2010 14:58:53

Re: вызов dll

Сообщение danya » 26.09.2010 15:13:43

исправил сам но работает через раз
а как использовать классы из .NET??
danya
незнакомец
 
Сообщения: 9
Зарегистрирован: 24.09.2010 14:58:53

Re: вызов dll

Сообщение Andrew » 27.09.2010 08:52:04

Здравствуйте,
не хочу плодить тем, по этому спрошу здесь
пытаюсь написать простенький шаблон для создания плагинов с помощью динамически подключаемых библиотек.
Написал простенькую библиотеку и программу для проверок
загрузка библиотеки, инициализация application и показ формы работают нормально, но если я передаю данные,
то считываются совершенно другое значение, пробовал передавать PCHAR, INTEGER и pointer
исходники прилагаю
p.s. использовал материал http://freepascal.ru/article//freepasca ... 522025034/
пробовал по виндой на Lazarus-0.9.29-27341-fpc-2.4.3-20100913
под линуксом не пробовал пока некогда
Вложения
modules.zip
исходники модуля
(160.82 КБ) Скачиваний: 455
Andrew
новенький
 
Сообщения: 14
Зарегистрирован: 15.01.2008 23:21:26

Re: вызов dll

Сообщение Kitayets » 27.09.2010 08:55:04

2danya

исправил сам но работает через раз

напиши хоть в чём ошибка была, может кому нибудь поможет.
а как использовать классы из .NET??

классы из .NET, может использовать только .NET приложение. из java только jvm приложение. Даже c++ классы напрямую нельзя из fpc использовать.
Kitayets
постоялец
 
Сообщения: 171
Зарегистрирован: 05.05.2010 21:15:24

Re: вызов dll

Сообщение danya » 27.09.2010 10:27:16

оформил функции так:
Код: Выделить всё
function SSQ_Ping:integer; stdcall;
  external 'SSQ.dll' name 'SSQ_Ping';
  function SSQ_SetGameServer(address:string):boolean; stdcall;
  external 'SSQ.dll' name 'SSQ_SetGameServer';               

и их вызов так
Код: Выделить всё
address:='simhost.org:27036';
ping_success:=SSQ_SetGameServer(address);

Код: Выделить всё
procedure TForm1.Timer1Timer(Sender: TObject);
begin
ping_success:=false;
ping:=SSQ_Ping;
Label1.Caption:=IntToStr(ping);
init:=SSQ_Initialize(false);
end; 

помучав немного стало работать как надо но программа почему-то через определённое время зависает
никто не знает как вылечить??
danya
незнакомец
 
Сообщения: 9
Зарегистрирован: 24.09.2010 14:58:53

Re: вызов dll

Сообщение Mr.Smart » 27.09.2010 10:34:03

danya
тип: char * не соответствует типу String!
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: вызов dll

Сообщение danya » 27.09.2010 11:32:15

а разве в си есть стринг?
как же тогда исправить?? подскажите пожалуйста а то си нас учили уже давненько да и не сказал бы что хорошо :)
danya
незнакомец
 
Сообщения: 9
Зарегистрирован: 24.09.2010 14:58:53

След.

Вернуться в Общее

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4

Рейтинг@Mail.ru
cron