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

Преобразование классов - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Написать программу, которая определяет, какая часть отрезка окрашен http://www.cyberforum.ru/cpp-beginners/thread1156003.html
Автомат проводит кистью по отрезку от точки A до точки B, а потом от точки C до точки D. Написать программу, которая определяет, какая часть отрезка окрашена.
C++ Заполнить матрицу ЛП, от правого верхнего угла по диагонали: влево - вниз http://www.cyberforum.ru/attachments/243234d1363129946 не могу понять что у меня не правильно, помогите пожалуйста. #include <stdio.h> #include <conio.h> #include <iostream> int main() { setlocale(LC_ALL, "Russian"); int n, k, j, i; int *a= new int; http://www.cyberforum.ru/cpp-beginners/thread1156002.html
C++ Разделить старшие и младшие биты в переменной
Объясните дураку работу с битовыми операциями... Есть у меня массив, где первый элемент это 32 младших бита, а второй - 32 старших unsigned int sp = {0x11111111, 0x22222222}; Теперь мне это нужно записать в переменную, делаю вот так long long var = (sp << 32) | (sp << 32); Далее провожу операции над этой переменной, а затем мне заново нужно разделить старшие и младшие биты. Пытаюсь сделать...
Переписать программу с паскаля на Си++ C++
Нужно переписать программу с паскаля на си ++. а то у меня не получается... uses crt; label l1,l2,l3,l4,l5; type osa=record x:integer; Y:integer; life:integer; baby:integer; xp:integer; Yp:integer; end;
C++ Создать динамический список, поменять местами последний и первый элементы списка, предпоследний и второй и т.д. http://www.cyberforum.ru/cpp-beginners/thread1155950.html
Всем привет. Подкиньте идею, весь мозг сломал. Задание:Создать динамический список. Поменять местами последний и первый элементы списка, предпоследний и второй и т. д.. Список создал, даже местами поменял, но поменял только заново инициализированный(созданный из массива) список, а как поменять местами заранее созданный список (добавленные, удаленные элементы) никак не соображу. Понимаю, что нужно...
C++ Удалить из строки все пробелы, расположенные перед знаком препинания Дана строка до точки, группа символов в которой между пробелами считается словом, знаки препинания от слова пробелом не отделяются. Удалить из строки все пробелы, расположенные перед знаком препинания. подробнее

Показать сообщение отдельно
DrOffset
6424 / 3798 / 879
Регистрация: 30.01.2014
Сообщений: 6,591
24.04.2014, 18:34     Преобразование классов
locm, в общем я все-таки предлагаю практично подойти к вопросу и не идти по опасному пути. Хотя конечно можно, но тогда дизассемблер в помощь. Стандарт языка не регламентирует как именно будут располагаться данные в памяти, поэтому тут только самостоятельные исследования помогут.
Однако, есть способ куда прямее. Нужно создать еще одну dll, на C++. Интерфейсом у нее будет набор С-функций, которые предоставляют доступ к объектам.
Покажу на простом примере:
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
class A
{
public:
    void set_a(int a);
    int  get_a();
 
private:
    int a;
};
 
class B
{
public:
    void set_b(int b);
    int  get_b();
 
private:
    int b;
};
 
class C : public A, public B
{
public:
    void set_c(int c);
    int  get_c();
 
private:
    int c;
};
//create
extern "C" void * create_A()
{
    return new A();
}
extern "C" void * create_B()
{
    return new B();
}
extern "C" void * create_C()
{
    return new C();
}
//destroy
extern "C" void destroy_A(void * ptr)
{
    return delete static_cast<A*>(ptr);
}
extern "C" void destroy_B(void * ptr)
{
    return delete static_cast<B*>(ptr);
}
extern "C" void destroy_C(void * ptr)
{
    return delete static_cast<C*>(ptr);
}
 
// only for A
extern "C" int A_get_a(void * ptr)
{
    return static_cast<A*>(ptr)->get_a();
}
extern "C" void A_set_a(void * ptr, int a)
{
    return static_cast<A*>(ptr)->set_a(a);
}
//only for B
extern "C" int B_get_b(void * ptr)
{
    return static_cast<B*>(ptr)->get_b();
}
extern "C" void B_set_b(void * ptr, int b)
{
    return static_cast<B*>(ptr)->set_b(b);
}
//only for C
extern "C" int C_get_a(void * ptr)
{
    return static_cast<C*>(ptr)->get_a();
}
extern "C" void C_set_a(void * ptr, int a)
{
    return static_cast<C*>(ptr)->set_a(a);
}
extern "C" int C_get_b(void * ptr)
{
    return static_cast<C*>(ptr)->get_b();
}
extern "C" void C_set_b(void * ptr, int b)
{
    return static_cast<C*>(ptr)->set_b(b);
}
extern "C" int C_get_c(void * ptr)
{
    return static_cast<C*>(ptr)->get_c();
}
extern "C" void C_set_c(void * ptr, int c)
{
    return static_cast<C*>(ptr)->set_c(c);
}
Теперь эту dll можно подключить к dll на Basic и использовать эти функции для создания и установки свойств С++ объектов. Это стандартный подход, при решении подобных задач.
 
Текущее время: 12:51. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru