Форум программистов, компьютерный форум, киберфорум
Наши страницы

C++

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

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

25.10.2015, 02:47. Просмотров 274. Ответов 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, а то что то офф. мануал скуп совсем.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.10.2015, 02:47
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Объяснения по DynCall (C++):

объяснения к коду - C++
Помогите объяснениями к коду(хотя бы через несколько строчек напишите коментарии) #include &quot;stdafx.h&quot; #include &lt;time.h&gt; #include...

Шаблоны С++ объяснения - C++
#include &quot;header.h&quot; void main () { setlocale(LC_ALL,&quot;&quot;); vector&lt;char&gt; a(3), b(3); a.set(); b.set(); cout&lt;&lt;&quot;A = &quot;&lt;&lt;a; ...

объяснения по коду - C++
#include &quot;std_lib_facilities.h&quot; int main() { string previous = &quot; &quot;; string current; while (cin&gt;&gt;current) { if...

Надеюсь получить объяснения - C++
ЗАДАНИЕ: Составить программу, которая вычисляет причитающуюся к выплате сумму через N месяцев, если деньги в сумме, равной S, положены...

Выручайте, объяснения внутри:) - C++
Стационарный комп, после скачка напряжения, отказывается работать(на нем стояла хр-шка и работал С++ Builder 6), сейчас пользуюсь ноутом,...

&,|, ^, приведите пример на каждую операцию бе компелятора а в ручную , для объяснения работы этих операций - C++
#include &lt;iostream&gt; int main() { char op = 0; std::cin &gt;&gt; op; int a = 220; int b =...

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

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

Спасибо.

Уже что то)) Но может есть какие то примерчики всё же, на чём можно посидеть поизучать "что куда и как"?
В инете что то по запросу dyncall C++ code пусто совсем.
0
Izual
94 / 119 / 6
Регистрация: 13.11.2012
Сообщений: 1,552
01.11.2015, 06:47  [ТС] #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 ----------*/
1
01.11.2015, 06:47
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.11.2015, 06:47
Привет! Вот еще темы с ответами:

Отправление данных через глобальную сеть (нужны объяснения) - C++
Начал разбираться с сокетами winsocks. Написал прогу, которая по локальному адресу принимает и отправляет на один и тот же комп сообщения....

Объяснения по презентации - MS Powerpoint
Нашел у себя на компе презентацию типа фокус. Как это сделали?

Объяснения объявления - Pascal ABC
u:Array of byte; Что значит это объявление?

небольшие объяснения - Delphi
Всем привет. Предыстория: сел делать программу для получения высшего балла за год в школе. С delphi не работал, учу паскаль. мне очень...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

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