Форум программистов, компьютерный форум CyberForum.ru

C++

Войти
Регистрация
Восстановить пароль
 
Izual
93 / 118 / 6
Регистрация: 13.11.2012
Сообщений: 1,535
#1

Объяснения по DynCall - C++

25.10.2015, 02:47. Просмотров 216. Ответов 3
Метки нет (Все метки)

(сижу на MSVC 2005 и 2013)
Нужна помощь по следующим пунктам:

1. Что надо чтоб начать работать с DynCall (что то в проэкте подключить, либы, что то заинсталлить?..)
2. Примеры простеньких программ с приминением DynCall.
3. Нашёл в нете такой пример:
C++
1
2
3
mathlib <- dynfind(c("msvcrt","m","m.so.6"))
x <- .dynsym(mathlib,"sqrt")
.dyncall(x, "d)d", 144L)
Я хочу использовать данную либо именно для подоных целей (рантайм вызов функций из длл), в этом примере ф. "dynsym" юзает явный float аргумент "144L", т.к. мне понадобится юзать разное кол-во аргументов разного типа, то как мне это сделать (есть какая то мультиконструкция может?) и могу ли я свою структуру (типа варианта) сюда пихнуть?
На офф. сайте есть другой пример(тут как раз пример варианта):
C++
1
2
3
4
 double sqrt(double x);
dcReset(vm); // Init/flush arguments.
dcArgDouble(vm, 5.2); // Push/bind argument(s).
r = dcCallDouble(vm, (DCpointer)&sqrt); // Call.
Хотелось бы часть от туда, часть от сюда, простенький примерчик, чтоб было от чего оттолкнуться.
4. Может есть какие то туториалы или более вминяемая инфа о библиотеке DynCall, а то что то офф. мануал скуп совсем.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.10.2015, 02:47     Объяснения по DynCall
Посмотрите здесь:

Софт Объяснения по презентации
объяснения к коду C++
Выручайте, объяснения внутри:) C++
C++ объяснения по коду
C++ Надеюсь получить объяснения
C++ &,|, ^, приведите пример на каждую операцию бе компелятора а в ручную , для объяснения работы этих операций
Delphi Delphi. Нужны объяснения
Объяснения объявления Pascal ABC
Отправление данных через глобальную сеть (нужны объяснения) C++
C++ Шаблоны С++ объяснения
Delphi небольшие объяснения

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DrOffset
6840 / 4051 / 924
Регистрация: 30.01.2014
Сообщений: 6,855
25.10.2015, 13:50     Объяснения по DynCall #2
Izual, все как обычно. Идем на страницу загрузки, сразу качаем мануал, изучаем его вдоль и поперек.
Ниже есть уже собранные под разные платформы библиотеки. Нам нужна windows x86 или x64.
Качаем архив, ставим в удобное место.
Далее на примере проекта x86. Создаем проект, прописываем путь к каталогу lib (в настройках компоновщика), путь к каталогу include (в настройках компилятора).
Добавляем библиотеку libdyncall_s.lib в список подключаемых библиотек (там же, в настройках компоновщика).
Еще нужно будет отключить безопасные обработчики исключений (ключик /SAFESEH:NO).
На всякий случай прикрепляю готовый проект: dyncall_test.zip (нужные либы внутри).
Izual
93 / 118 / 6
Регистрация: 13.11.2012
Сообщений: 1,535
25.10.2015, 14:45  [ТС]     Объяснения по DynCall #3
Цитата Сообщение от DrOffset Посмотреть сообщение
изучаем его вдоль и поперек
Там изучать то нечего, большая часть инфы про то "что где когда и кто" это построил, чисто практической инфы для начинающих нету(

Всё подключил, всё завелось, скопирнул код с sqrt в свой проэкт (win32), всё заработало.

Спасибо.

Уже что то)) Но может есть какие то примерчики всё же, на чём можно посидеть поизучать "что куда и как"?
В инете что то по запросу dyncall C++ code пусто совсем.
Izual
93 / 118 / 6
Регистрация: 13.11.2012
Сообщений: 1,535
01.11.2015, 06:47  [ТС]     Объяснения по DynCall #4
Сам нашёл то что надо:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
/* This routine dynamically calls MessageBox */
/* (or any API function) at run-time.        */
 
/* LINK with these LIBs: libdyncall_s.lib, libdynload_s.lib */
 
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#include <dyncall.h>
#include <dynload.h>
 
 
  char dllname[32];
  char functionname[32];
 
 
int main()
{   int xhwnd = 0, xtype = 1, retVal;
    char text[20] = {"hello world"};
    char capt[10] = {"hello"};
    void* funcptr;
    void* libhandle;
 
            /* name of DLL to open */
    strcpy(dllname, "user32.dll");
 
            /* name of function to call */
    strcpy(functionname, "MessageBoxA");
 
            /* open DLL */
    libhandle = dlLoadLibrary(dllname);
            /* here: check for NULL return: failure */
 
            /* locate function */
    funcptr = dlFindSymbol(libhandle,functionname);
            /* here: check for NULL return: failure */
 
            /* create a callvm (to be shared within your app) */
    DCCallVM * pvm = dcNewCallVM(4096);
 
            /* configure the callvm for call conv..*/
    dcMode(pvm, DC_CALL_C_X86_WIN32_STD);
 
            /* reset the argument buffer */
    dcReset(pvm);
 
            /* now load arguments (from left to right order) */
    dcArgInt(pvm, xhwnd);
    dcArgPointer(pvm, text);
    dcArgPointer(pvm, capt);
    dcArgInt(pvm, xtype);
 
            /* now call by specifying return type */
    retVal = dcCallInt(pvm,funcptr);
 
            /* free library handle */
    dlFreeLibrary(libhandle);
 
            /* free VM */
    dcFree(pvm);
 
    system("pause");
 
    return 0;
}
/*--------- end main ----------*/
Yandex
Объявления
01.11.2015, 06:47     Объяснения по DynCall
Ответ Создать тему
Опции темы

Текущее время: 18:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru