Преодоление "ада хидеров" с помощью SLL

Раздел посвящен программированию с использованием Power Basic.
jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Преодоление "ада хидеров" с помощью SLL

Сообщение jangle » 06.02.2013 (Ср) 14:07

Оказывается очень правильная эта штука SLL! Я оценил...
Допустим у вас есть несколько проектов которые надо слить в один.

1- ый проект написан для PB9 с его версией хидеров
2- ой проект написан для PB10 со стандартной версией хидеров
3 - для PB10 с Windows API Headers II v.1.0 от José Roca
4 - для PB10 с Windows API Headers III v.1.04

А теперь попробуйте все это слить в один проект и откопилировать все в PB10. Как говорится фиг вам!
В инклюдах запутаетесь. Или все надо переделывать под последнюю версию хидеров, что очень печально, скучно и чревато ошибками.
И еще к тому же приводит к раздуванию генерируемого EXE файла. Так вот с помощью SLL все можно легко переделать и вообще избавиться от хидеров!

Для этого:

- Переносим весь код старого проекта в класс и его методы. Класс компилируем как SLL c нужной ему версией хидеров, со своим глобальными переменными, типами и прочим мусором


Код: Выделить всё
#Compile SLL
#Include "F:\PBWin103\WinAPI\win32api.inc"

Type TCmd
   Command  As Dword
   sizex    As Dword
End Type   

%METHOD_BUFFERED                          =   0
%FILE_ANY_ACCESS                          =   0
%FILE_DEVICE_UNKNOWN                      =  34     

Class cTEST1 Common       

............ КОД КЛАССА


- делаем это для всех 4 кусков проекта, в результате получает 4 бинарных SLL файла

- пишем основной проект в котором указываем пути для директивы #LINK и прописываем пути к классам


Код: Выделить всё
#Compile Exe
#Dim All
#Link "..\SHARED_SLL\PB9\TEST1.sll"
#Link "..\SHARED_SLL\PB10_1\TEST2_sll.sll"
#Link "..\SHARED_SLL\PB10_2\TEST3_sll.sll"

Function PBMain () As Long
     Local clsTEST1 As cTEST1Interface
     clsTest1 = Class "cTest"

      Local clsTEST2 As cTEST2Interface
      clsTest2 =  Class "cTest2 "         


Красота же! Мы получили 4 класса, каждый был скомпилирован со своими версиями хидеров и со своим глобальным мусором.
И теперь они никак не влияют друг на друга. Все инкапсулировано внутрь SLL. После компиляции получаем монолитный экзешник, размеров меньший чем если бы мы просто подключали инклюды с классами. И хидеров теперь вообще нет! Только красивая объектная модель.

Вернуться в Power Basic

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 41

    TopList