 |

22.08.2017, 19:00
|
|
Флудер
Регистрация: 26.10.2013
Сообщений: 4,924
С нами:
6603505
Репутация:
183
|
|
Кратко: Пидорасит нормальный C++ класс в проксирующие С функции для экспорта.
Подробно: Люди отвечающие за формирование стандарта C++ конченые долбоебы, котороые не осилили стандартизировать взаимодействие библиотек. Из-за чего библиотеки скомпилированные разными компиляторами могут быть не совместимы. Что бы пофиксить этот зашквар прогеры на экспорт хуярят функции через extern "C", что бы действовал стандарт не C++, а C в котором таки есть соглашение о взаимодействии библиотек. Для меня особой болью в жопе было экспортирование классов, и вот, я написал огнетушитель, который создает прокси-функции с extern "C" для классов.
Интересные факты из вашей жизни: Те из вас, кто осилили скачать программу, заметили, что это не цельный кусок говна, а 2 куска говна - библиотека и программа. Так вот, сама программа - просто gui обертка, и в скором времени, если не забью *** на это поделие, я выпущу cli обертку способную работать из терминала. Это позволит в параметрах проекта указать автоматический вызов сего поделия перед каждой компиляцией, что еще больше автоматизирует создание проксирующих функций для ваших классов.
Скачать для Windows: https://dl.prime-hack.net/HardExportClass.zip
Скачать для Linux: https://dl.prime-hack.net/HardExportClass_linux.zip
Результаты работы:
Сообщение от Спойлер
Код:
Код:
#include
//TODO: fuck
class aaa{
public:
aaa(int a);
~aaa();
void f();
int get();
private:
int a;
public:
float Z(int l){
return l*72;
}
};
Сообщение от Спойлер
Export:
Код:
Код:
#ifdef WIN32
#define EXPORT extern "C" __declspec(dllexport)
#else
#define EXPORT
#endif
#include "class.h"
EXPORT void* aaaIinit0_aaa( void* paaa, int a ){
return new aaa(a);
}
EXPORT void aaaIfini1_aaa( void* paaa ){
delete (aaa*)paaa;
}
EXPORT void aaaIpublic2_f( void* paaa ){
return ((aaa*)paaa)->f( );
}
EXPORT int aaaIpublic3_get( void* paaa ){
return ((aaa*)paaa)->get( );
}
EXPORT float aaaIpublic4_Z( void* paaa, int l ){
return ((aaa*)paaa)->Z( l );
}
Import:
Код:
Код:
#ifdef WIN32
#define IMPORT extern "C" __declspec(dllimport)
#else
#define IMPORT
#endif
IMPORT void* aaaIinit0_aaa( void* paaa, int a );
IMPORT void aaaIfini1_aaa( void* paaa );
IMPORT void aaaIpublic2_f( void* paaa );
IMPORT int aaaIpublic3_get( void* paaa );
IMPORT float aaaIpublic4_Z( void* paaa, int l );
class aaa {
void* _this = nullptr;
public:
aaa(int a){
_this = aaaIinit0_aaa( paaa, a );
}
~aaa(){
aaaIfini1_aaa( paaa );
_this = nullptr;
}
void f( ){
return aaaIpublic2_f( paaa );
}
int get( ){
return aaaIpublic3_get( paaa );
}
private:
public:
float Z( int l ){
return aaaIpublic4_Z( paaa, l );
}
};
|
|
|

22.08.2017, 19:03
|
|
Флудер
Регистрация: 22.11.2015
Сообщений: 2,128
С нами:
5512984
Репутация:
183
|
|
с pawn дружит?
|
|
|

22.08.2017, 19:07
|
|
Флудер
Регистрация: 26.10.2013
Сообщений: 4,924
С нами:
6603505
Репутация:
183
|
|
Сообщение от sanek a.k.a Maks_Fender
с pawn дружит?
при чем тут pawn?
|
|
|

23.08.2017, 03:30
|
|
Флудер
Регистрация: 22.11.2015
Сообщений: 2,128
С нами:
5512984
Репутация:
183
|
|
Сообщение от SR_team
при чем тут pawn?
ну типа павн близок к с++ и довольно часто можно встретить моды, в которых кривая табуляция
|
|
|

23.08.2017, 09:06
|
|
Познавший АНТИЧАТ
Регистрация: 09.03.2013
Сообщений: 1,262
С нами:
6935116
Репутация:
183
|
|
Сообщение от sanek a.k.a Maks_Fender
ну типа павн близок к с++ и довольно часто можно встретить моды, в которых кривая табуляция
павн близок к С
|
|
|

23.08.2017, 11:53
|
|
Участник форума
Регистрация: 16.08.2013
Сообщений: 190
С нами:
6704662
Репутация:
78
|
|
Опять какую то ***ню изобрел.
|
|
|

23.08.2017, 11:56
|
|
Флудер
Регистрация: 22.11.2015
Сообщений: 2,128
С нами:
5512984
Репутация:
183
|
|
Сообщение от Ubiyca100
Опять какую то ***ню изобрел.
нормальная ***ня
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|