Как пройти в библиотеку?

f43616a8efc69f73de74134b8fc04407

Графические файлы: GraphWPFBase.pas GraphWPF.pas

компилируются в модули .dcu.

Шальная мысль и блажь: что нужно изменить в файлах .pas, чтобы скомпилировать библиотеку dll?

С файлом GraphWPFBase.pas получается, а файл GraphWPF.pas упорно сопротивляется.

Не уверен, но хотелось бы, чтобы этих библиотек было достаточно, чтобы, например, писать графические программы, как на паскале, но на Си-шарпе.

Не заставляйте меня думать самому…

плохая идея писать на pabc библиотеки не для pabc. слишком много торчит кода, генерируемого pabc

а что не получается-то? меняете unit на library и всё в общем-то

правда, если хотите, чтобы GraphWPFBase тоже была в виде библиотеки, а не вшивалась в GraphWPF.dll, то сначала компилируете GraphWPFBase.pas как библиотеку, а в GraphWPF.pas добавляете {$reference GraphWPFBase.dll}

В Base это проходит, а GraphWPF то не видит конца файла, то требует begin…

Я глубоко не вдавался, а сходу не получается.

Для чего это нужно?

Например, я использовал библиотеки SmallBasic и иже с ним на PascalABC.NET и на Си-шарпе. С Черепашкой PascalABC.NET ПОКА явно проигрывает, поэтому использовать её в программах не стоит (или уж в самых простых). Прямые, прямоугольники, многоугольники, эллипсы в PascalABC.NET значительно лучше, чем в сторонних библиотеках. PascalABC.NET не так широко распространён, как Си-шарп, поэтому некоторые проекты можно было бы переписать на Си-шарп, но с возможностями PascalABC.NET. Это и реклама самому PascalABC.NET, и расширение графических возможностей Си-шарпа, как международного бла-бла-бла программирования.

Если компилировать GraphWPF.pas из папки LibSource как библиотеку, то создаётся файл GraphWPF.dll.

Его можно использовать на Си-шарпе. Никаких ошибок при компиляции не возникает, но окно не создаётся. Видимо, копать нужно глубже…

Вы программу на C# какой делаете, оконной или консольной?

Так себе реклама на самом деле

может быть связано с тем, что требуется инициализация. надо использовать что-то из класса GraphWPF.GraphWPF

А, нет, там отдельно какой то метод для инициализации генерируется. Не статический конструктор а именно метод. Надо декомпилятором залезть.

Реклама самая нормальная! Ещё кто-нибудь узнает про PascalABC.NET. У меня нет возможности растягивать баннеры по всему миру.

В том-то и дело, что проблема лежит не на поверхности. На Си-шарпе ошибки не появляются, то есть ошибок в самом коде нет, но что-то не срабатывает.

С чего б там ошибка была, из за отсутствия инициализации?

При запуске программы из среды PascalABC.NET тоже ошибка не возникает. В подсказке есть класс Window и его методы. Программа не завершается, но окно не появляется на экране.

Та я говорю и не должна быть ошибка. Вы метод инициализации в итоге нашли, вызвали? Он по идее будет в классе с тем же именем что и модуль.

проблема неочевидная: если мы вызываем методы окна из модуля, то создаётся окно и выполняется метод - например, будет начерчена окружность.

Если сделать то же самое из библиотеки, то всё проходит, но ничего не видно и окно не возвращает никакой информации о себе - например, размеры.

Так происходит на практике. В теорию этого вопроса я не погружался.

Думаю, что коды модуля и код библиотеки чем-то должны различаться. Но переписывать модуль пока не вижу смысла.

ИНИЦИАЛИЗАЦИЯ. ВЫ ЕЁ ВЫЗВАЛИ? (при подключении модуля как библиотеки)

Не получается.

Я думаю, использовать б-ки PascalABC.NET это плохая затея.

Для этого не надо перекомпилировать модули как библиотеки, достаточно использовать PABCRtl.dll

1 лайк

Спасибо! Ценный совет!

Всё гениальное просто?

1 лайк