Посл.ответ |
Сообщение |
Ранг: 23.8 (новичок) Активность: 0.02↘0 Статус: Участник
|
Создано: 30 июня 2006 16:44 · Личное сообщение · #1
Есть либа, как на M$ VC++ написать модуль импорта функций из етой длл?
| Сообщение посчитали полезным: |
|
Ранг: 450.1 (мудрец) Активность: 0.26↘0 Статус: Участник
|
Создано: 30 июня 2006 17:07 · Личное сообщение · #2
не понял что нужно
| Сообщение посчитали полезным: |
Ранг: 23.8 (новичок) Активность: 0.02↘0 Статус: Участник
|
Создано: 30 июня 2006 17:10 · Личное сообщение · #3
Asterix, знаеш в дельфях есть такая хрень:
function abc(x:DWORD):DWORD; external "123.dll";
Вот мне тоже самое на си.
| Сообщение посчитали полезным: |
 Ранг: 122.3 (ветеран) Активность: 0.05↘0 Статус: Участник
|
Создано: 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.26↘0 Статус: Участник
|
Создано: 30 июня 2006 17:15 · Личное сообщение · #5
тебе нужно описать прототипы функций, для этого нужно их знать
| Сообщение посчитали полезным: |
Ранг: 450.1 (мудрец) Активность: 0.26↘0 Статус: Участник
|
Создано: 30 июня 2006 17:16 · Личное сообщение · #6
intty
вроде речь про импорт шла
| Сообщение посчитали полезным: |
 Ранг: 122.3 (ветеран) Активность: 0.05↘0 Статус: Участник
|
Создано: 30 июня 2006 17:18 · Личное сообщение · #7
Asterix
по первому посту вроде бы да, но потом:
Luminescent пишет:
function abc(x:DWORD):DWORD; external "123.dll";
так что похоже заюзать что-то из внешней dll-ки
а вообще конечно очень невнятно говорит что нужно
| Сообщение посчитали полезным: |
Ранг: 23.8 (новичок) Активность: 0.02↘0 Статус: Участник
|
Создано: 30 июня 2006 17:19 · Личное сообщение · #8
intty,
А чё такое .деф? У меня есть только длл, больше ничего. А ваще-то, спасибо, я кажеца понял
Asterix пишет:
тебе нужно описать прототипы функций, для этого нужно их знать
Оля мне поможет
| Сообщение посчитали полезным: |
 Ранг: 748.2 (! !), 390thx Активность: 0.37↘0 Статус: Участник 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.02↘0 Статус: Участник
|
Создано: 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.02↘0 Статус: Участник
|
Создано: 30 июня 2006 17:49 · Поправил: Luminescent · Личное сообщение · #11
Ок, спасибо всем, я тут уже всех задолбал. Дальше сам разберусь.
| Сообщение посчитали полезным: |
 Ранг: 251.8 (наставник), 17thx Активность: 0.12↘0 Статус: Участник 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.02↘0 Статус: Участник
|
Создано: 30 июня 2006 21:55 · Личное сообщение · #13
=TS= пишет:
Звращенец
Да ладно!  Я на сях не так давно начал писать и такую хреновину 1й раз делаю.
Просто к асм превык до безобразия, весде его сую.
ЗЫ спасибо за кусочек!
| Сообщение посчитали полезным: |
 Ранг: 251.8 (наставник), 17thx Активность: 0.12↘0 Статус: Участник Seeker
|
Создано: 30 июня 2006 22:03 · Поправил: =TS= · Личное сообщение · #14
Luminescent
Незачто, все мі учимся  . Я код поправил под все проверки. как правильно.
Кстати там вместо "WINAPI" пишется твоя конвенция вызовов
----- DREAMS CALL US | Сообщение посчитали полезным: |