powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Вызов функции
8 сообщений из 8, страница 1 из 1
Вызов функции
    #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
Вызов функции
    #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
Вызов функции
    #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
Вызов функции
    #33246699
David_djan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и не забудь выгрузить DLL

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

FreeLibrary(hDll);

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


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

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

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


ну вот..
ик..

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

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


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