Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Вызов функции / 8 сообщений из 8, страница 1 из 1
01.09.2005, 14:32
    #33246122
MikeS
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов функции
Доброго времени суток!

Есть DLL-ка, в которой прописана функция

extern “C” DWORD call_sb_kernel(
DWORD func,
void *in_arg,
void *out_arg);

Функция использует метод вызова языка С (cdecl).
Ниже приводится описание параметров функции.

DWORD func
Номер вызываемой функции ядра.

void *in_arg
Указатель на структуру, содержащую параметры, передаваемые функции. Структура описана следующим образом.

typedef struct tagInArg{
void *Reserved;
void *in_struct;
} InArg;

Параметр Reserved должен иметь значение NULL, если противное специально не оговаривается в описании конкретной функции.

Параметр in_struct – указатель на буфер типа struct_in_clX, где X – номер класса , для функций ненулевого класа, или указатель на буфер типа struct_inX, где X – номер функции класса 0, или NULL, если функция не принимает параметров.

void *out_arg
Указатель на структуру, в которой возвращается результат. Структура описана следующим образом.

typedef struct tagOutArg{
DWORD ErrorCode; //код завершения операции
DWORD Flags; //флаги последующей обработки
void *Reserved;
void *out_struct;
} OutArg;

Вопрос чайника - как вызывать эту функцию из внешней программы?

Заранее благодарен за ответы
...
Рейтинг: 0 / 0
01.09.2005, 16:41
    #33246673
David_djan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов функции
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
typedef DWORD(__cdecl *fcall_sb_kernel)(DWORD func, void *in_arg, void *out_arg)

------------
void foo ()
{
fcall_sb_kernel call_sb_kernel = NULL;
HANDLE hDll = LoadLibrary("твоя dll");
if (!hDll)
    SayFuck();

call_sb_kernel = (fcall_sb_kernel*)GetProcAddress(hDll, "call_sb_kernel");
if (!call_sb_kernel)
    SayFuck();

DWORD res = (call_sb_kernel)( 1 , NULL, NULL);
}

динамическая линковка, что то в этом роде - код не проверял, сорри времени нет.
...
Рейтинг: 0 / 0
01.09.2005, 16:42
    #33246678
David_djan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов функции
call_sb_kernel = (fcall_sb_kernel*)GetProcAddress(hDll, "call_sb_kernel");

вместо этого

call_sb_kernel = (fcall_sb_kernel)GetProcAddress(hDll, "call_sb_kernel");
...
Рейтинг: 0 / 0
01.09.2005, 16:46
    #33246699
David_djan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов функции
и не забудь выгрузить DLL

FreeLibrary(hDll);
...
Рейтинг: 0 / 0
02.09.2005, 12:38
    #33248105
kolobok0
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов функции
David_djanи не забудь выгрузить DLL

FreeLibrary(hDll);

Добавлю ышо...что...
1) Описанный выше способ - называеться "Явной загрузкой".
2) Есть ышо и "не явная"... Суть сводиться к следующему... В месте юзанья подставляете ашник из дэлеле с экспортом. И используете классы или переменные так, как если бы они были бы у Вас в коде. Линковщику указываете путя и ЛИБ файл вашей дэлеле. всё...


удачи Вам
(круглый)
ЗЫ
А лучше почитайте Джэфри Рихтера - не плохая парта по Win32.
...
Рейтинг: 0 / 0
02.09.2005, 13:00
    #33248168
Gluk (Kazan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов функции
2 kolobok

Мощно задвинул Долго врубался в твою терминологию.
Рихтер нервно отдыхает.
...
Рейтинг: 0 / 0
02.09.2005, 13:10
    #33248205
kolobok0
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов функции
Gluk (Kazan)Мощно задвинул ...

опять хаешь ? :)


ну вот..
ик..

(круглый)
...
Рейтинг: 0 / 0
02.09.2005, 13:11
    #33248212
Gluk (Kazan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов функции
Да не, мне та чо ???

P.S. Щастье - это када тебя панимают !!!
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Вызов функции / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]