Сейчас на форуме: hgdagon, asfa, bartolomeo (+6 невидимых)

 eXeL@B —› Программирование —› DLL
Посл.ответ Сообщение

Ранг: 23.8 (новичок)
Активность: 0.020
Статус: Участник

Создано: 30 июня 2006 16:44
· Личное сообщение · #1

Есть либа, как на M$ VC++ написать модуль импорта функций из етой длл?



Ранг: 450.1 (мудрец)
Активность: 0.260
Статус: Участник

Создано: 30 июня 2006 17:07
· Личное сообщение · #2

не понял что нужно



Ранг: 23.8 (новичок)
Активность: 0.020
Статус: Участник

Создано: 30 июня 2006 17:10
· Личное сообщение · #3

Asterix, знаеш в дельфях есть такая хрень:
function abc(x:DWORD):DWORD; external "123.dll";
Вот мне тоже самое на си.




Ранг: 122.3 (ветеран)
Активность: 0.050
Статус: Участник

Создано: 30 июня 2006 17:15 · Поправил: intty
· Личное сообщение · #4

видимо человеку нужно сделать lib из dll

для этого скорми утилите lib.exe def файл

lib /DEF:mydll.def


где def файл может выглядеть так:

LIBRARY mydll
EXPORTS
myFunction01
myFunction02
<...>

получится mydll.lib который скормишь линкеру

cl myprogram.c mydll.lib



Ранг: 450.1 (мудрец)
Активность: 0.260
Статус: Участник

Создано: 30 июня 2006 17:15
· Личное сообщение · #5

тебе нужно описать прототипы функций, для этого нужно их знать



Ранг: 450.1 (мудрец)
Активность: 0.260
Статус: Участник

Создано: 30 июня 2006 17:16
· Личное сообщение · #6

intty
вроде речь про импорт шла




Ранг: 122.3 (ветеран)
Активность: 0.050
Статус: Участник

Создано: 30 июня 2006 17:18
· Личное сообщение · #7

Asterix
по первому посту вроде бы да, но потом:
Luminescent пишет:
function abc(x:DWORD):DWORD; external "123.dll";


так что похоже заюзать что-то из внешней dll-ки

а вообще конечно очень невнятно говорит что нужно



Ранг: 23.8 (новичок)
Активность: 0.020
Статус: Участник

Создано: 30 июня 2006 17:19
· Личное сообщение · #8

intty,
А чё такое .деф? У меня есть только длл, больше ничего. А ваще-то, спасибо, я кажеца понял

Asterix пишет:
тебе нужно описать прототипы функций, для этого нужно их знать

Оля мне поможет




Ранг: 748.2 (! !), 390thx
Активность: 0.370
Статус: Участник
bytecode!

Создано: 30 июня 2006 17:22 · Поправил: 4kusNick
· Личное сообщение · #9

Luminescent
Либа на каком языке?
Если на дельфях и ты знаешь ф-ции, которые тебе надо импортировать, то так:

Delphi DLL:

library MinMax;

function Min(X, Y: Integer): Integer; export;
begin
if X < Y then
Min := X
else
Min := Y;
end;

function Max(X, Y: Integer): Integer; export;
begin
if X > Y then
Max := X
else
Max := Y;
end;

exports

Min index 1,
Max index 2;

begin
end.



DEF-файл

IMPORTS
Min =MINMAX.Min
Max =MINMAX.Max


Прототипы функций в C-приложении:


int FAR PASCAL Min(int x, y);
int FAR PASCAL Max(int x, y);


Теперь из любого места приложения можно вызвать функции Min и Max.

-----
Флэш, ява, дотнет - на завтрак, обед и ужин. Unity3D на закуску.




Ранг: 23.8 (новичок)
Активность: 0.020
Статус: Участник

Создано: 30 июня 2006 17:30
· Личное сообщение · #10

4kusNick пишет:
Либа на каком языке?

Она на С++, но сорса у мня нету, т.к. эту либу я спёр из одной проги, и хотел заюзать в своей.
Просто штоб не писать вот так


HMODULE hlib = LoadLibrary("mylibrary.dll");
FARPROC proc = GetProcAddress(hlib, "SomeFunctionA");
__asm
{
push <параметры>
call proc
}
FreeLibrary(hlib);


Я хотел по-нормальному импортнуть все фии. Я знаю есть для етого тулзы, но они для асма.
Мне вот как раз и нужно прототипы написать.



Ранг: 23.8 (новичок)
Активность: 0.020
Статус: Участник

Создано: 30 июня 2006 17:49 · Поправил: Luminescent
· Личное сообщение · #11

Ок, спасибо всем, я тут уже всех задолбал. Дальше сам разберусь.




Ранг: 251.8 (наставник), 17thx
Активность: 0.120
Статус: Участник
Seeker

Создано: 30 июня 2006 21:48 · Поправил: =TS=
· Личное сообщение · #12

Luminescent пишет:
__asm
{
push <параметры>
call proc
}

Звращенец


typedef тип (WINAPI * pproc1 (...);
typedef тип (WINAPI * pproc2 (...);
...

proc1 pproc1;
proc2 pproc2;
...

HMODULE hlib = LoadLibrary("mylibrary.dll");
if (hlib)
{
proc1= (pproc1) GetProcAddress(hlib, "SomeFunctionA");
proc2= (pproc2) GetProcAddress(hlib, "SomeFunctionB");
...
}

...

if (hlib)
{
...
if (proc1 )proc1(...);
...
if (proc2 )proc2(...);
...
FreeLibrary(hlib);
}



-----
DREAMS CALL US




Ранг: 23.8 (новичок)
Активность: 0.020
Статус: Участник

Создано: 30 июня 2006 21:55
· Личное сообщение · #13

=TS= пишет:
Звращенец

Да ладно! Я на сях не так давно начал писать и такую хреновину 1й раз делаю.
Просто к асм превык до безобразия, весде его сую.
ЗЫ спасибо за кусочек!




Ранг: 251.8 (наставник), 17thx
Активность: 0.120
Статус: Участник
Seeker

Создано: 30 июня 2006 22:03 · Поправил: =TS=
· Личное сообщение · #14

Luminescent
Незачто, все мі учимся . Я код поправил под все проверки. как правильно.
Кстати там вместо "WINAPI" пишется твоя конвенция вызовов

-----
DREAMS CALL US



 eXeL@B —› Программирование —› DLL
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати