Как отменить удаление obj-файлов?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Old_Maple
Обычный пользователь
Обычный пользователь
 
Сообщения: 54
Зарегистрирован: 25.10.2016 (Вт) 12:03

Как отменить удаление obj-файлов?

Сообщение Old_Maple » 21.02.2019 (Чт) 10:31

Уважаемые форумчане, подскажите пожалуйста,
Вопрос первый: есть ли ключи, которые можно прописать в разделе [VBCompiler] файла *.vbp, отмены удаления obj-файлов после компиляции и линковки?
Вопрос второй: Как правильно задекларировать функции и процедуры в VB6, которые находятся в сторонних obj-файлах, чтобы после линковки с ними программа работала корректно?
Заранее спасибо!
Veritas est aeterna!

The trick
Постоялец
Постоялец
 
Сообщения: 781
Зарегистрирован: 26.06.2010 (Сб) 23:08

Re: Как отменить удаление obj-файлов?

Сообщение The trick » 21.02.2019 (Чт) 10:33

UA6527P

Old_Maple
Обычный пользователь
Обычный пользователь
 
Сообщения: 54
Зарегистрирован: 25.10.2016 (Вт) 12:03

Re: Как отменить удаление obj-файлов?

Сообщение Old_Maple » 21.02.2019 (Чт) 11:34

The trick писал(а):https://www.sql.ru/forum/1308202/linkovka-staticheskih-bibliotek-obj-lib-k-vb-ekzeshniku

К сожалению, в этой статье не совсем то, что нужно. Я поясню.
Мне нужно, чтобы после компиляции VB obj-файлы сохранялись в каталоге, а не удалялись. К этим VB obj-файлам я хочу прилинковать функции, которые находятся в сторонних obj-файлах (например, после компиляции nvcc + cc).
В случае работы с IDE, все понятно, я прикручиваю dll. Но при создании nativ-кода не понимаю, как сослаться на функции внутри сторонних obj-фалов? Как их корректно задекларировать в программе?
Veritas est aeterna!

The trick
Постоялец
Постоялец
 
Сообщения: 781
Зарегистрирован: 26.06.2010 (Сб) 23:08

Re: Как отменить удаление obj-файлов?

Сообщение The trick » 21.02.2019 (Чт) 11:43

Old_Maple писал(а):Мне нужно, чтобы после компиляции VB obj-файлы сохранялись в каталоге, а не удалялись. К этим VB obj-файлам я хочу прилинковать функции, которые находятся в сторонних obj-файлах (например, после компиляции nvcc + cc).

Я что-то не пойму. Ну есть там batch скрипт, пиши что хочешь, хоть копирование хоть замену.

Old_Maple писал(а):Но при создании nativ-кода не понимаю, как сослаться на функции внутри сторонних obj-фалов? Как их корректно задекларировать в программе?

Я не понимаю, нужно прилинковать VB-шный объектник к стороннему не-вбшному, либо сторонний к VB-шному? Если второе то в примере как раз об этом и сказано.
UA6527P

Old_Maple
Обычный пользователь
Обычный пользователь
 
Сообщения: 54
Зарегистрирован: 25.10.2016 (Вт) 12:03

Re: Как отменить удаление obj-файлов?

Сообщение Old_Maple » 21.02.2019 (Чт) 11:58

The trick писал(а):Я не понимаю, нужно прилинковать VB-шный объектник к стороннему не-вбшному, либо сторонний к VB-шному? Если второе то в примере как раз об этом и сказано.

Именно второе! :-)
Только вот эту штуку как прикручивать к VB6?
Код: Выделить всё
format MS COFF
section '.text' code readable executable
WriteToConsole equ ?WriteToConsole@@YGXPAG@Z
ReadFromConsole equ ?ReadFromConsole@@YGXPAPAG@Z

extrn WriteToConsole
extrn ReadFromConsole

public ?WriteToConsole@modStaticLib@@AAGXXZ
public ?ReadFromConsole@modStaticLib@@AAGXXZ

?WriteToConsole@modStaticLib@@AAGXXZ:
jmp WriteToConsole

?ReadFromConsole@modStaticLib@@AAGXXZ:
jmp ReadFromConsole
Veritas est aeterna!

The trick
Постоялец
Постоялец
 
Сообщения: 781
Зарегистрирован: 26.06.2010 (Сб) 23:08

Re: Как отменить удаление obj-файлов?

Сообщение The trick » 21.02.2019 (Чт) 12:06

Old_Maple писал(а):Только вот эту штуку как прикручивать к VB6?

Там все описано. Данный файл создается в FASM'е, а вообще на любом ассемблере можно переписать только нужно синтаксис подправить под конкретный. Линкуется подменой VB-шного объектника с функциями-пустышками, на данный ассемблерный obj-переходник. Также заметь что в примере озвучиваются баги родного линкера при изменении точки входа (это требуется к примеру для инициализации сишного рантайма, глобальных переменных и т.п.). Если такая инициализация не требуется можно использовать OPT:NOREF и с родным линкером.

Для линковки объектников между 2-мя VB проектами нужно еще дополнительно обеспечить инициализацию контекста линкуемого проекта для главного потока. Если кому-то это будет интересно могу еще и это описать.

Также можно написать Add-in который будет заменять символы, тогда никаких асмовских переходников не требуется. Я начал писать такой, но из-за неактуальности данного инструмента забросил.
UA6527P

Old_Maple
Обычный пользователь
Обычный пользователь
 
Сообщения: 54
Зарегистрирован: 25.10.2016 (Вт) 12:03

Re: Как отменить удаление obj-файлов?

Сообщение Old_Maple » 21.02.2019 (Чт) 12:18

The trick писал(а):Данный файл создается в FASM'е, а вообще на любом ассемблере можно переписать только нужно синтаксис подправить под конкретный.

Это-то меня и пугает.
Я думал, что можно как-то средствами VB6 обойтись. Есть свой компилятор, есть линкер, а тут еще и "сторонников" (masm, fasm и т.п.) нужно привлекать.
Может есть другие варианты линковки obj-файлов в ехе-шник?
Veritas est aeterna!

The trick
Постоялец
Постоялец
 
Сообщения: 781
Зарегистрирован: 26.06.2010 (Сб) 23:08

Re: Как отменить удаление obj-файлов?

Сообщение The trick » 21.02.2019 (Чт) 12:49

Old_Maple писал(а):Это-то меня и пугает.

Чем? Ну не нравится асм пиши на C++ (но там еще нужно разобраться получится ли из-за декорирования).

Old_Maple писал(а):Может есть другие варианты линковки obj-файлов в ехе-шник?

Все зависит от того что линкуется и как, требуется ли инициализация рантайма и т.п.
UA6527P

Old_Maple
Обычный пользователь
Обычный пользователь
 
Сообщения: 54
Зарегистрирован: 25.10.2016 (Вт) 12:03

Re: Как отменить удаление obj-файлов?

Сообщение Old_Maple » 21.02.2019 (Чт) 13:49

The trick писал(а):Все зависит от того что линкуется и как, требуется ли инициализация рантайма и т.п.

В общем, понятно. Простого пути пока нет.
Что ж, буду ждать другие варианты решения данной проблемы.
Кстати, а как насчет "опций/ключей", чтобы не удалялись obj-файлы? Есть ли таковые для [VBCompiler]?
Veritas est aeterna!

The trick
Постоялец
Постоялец
 
Сообщения: 781
Зарегистрирован: 26.06.2010 (Сб) 23:08

Re: Как отменить удаление obj-файлов?

Сообщение The trick » 21.02.2019 (Чт) 14:51

Old_Maple писал(а):В общем, понятно. Простого пути пока нет.

Компилятор компилирует то что ему дают. Если ты вызываешь из одного модуля функцию foo находящуюся в другом модуле, то и в объектнике будет ссылка на внешний символ foo (задекорированная). К примеру нам нужно вызвать функцию bar из другого объектника. Нет возможности синтаксисом vb указать extern сущность bar, поэтому тут несколько методов решения проблемы. Либо менять вызов foo на вызов bar в самом объектнике, либо менять имя bar на foo в линкуемом объектнике. Либо делать редирект с foo на bar как в моем примере.
Вот и выбирай способ.
UA6527P

Old_Maple
Обычный пользователь
Обычный пользователь
 
Сообщения: 54
Зарегистрирован: 25.10.2016 (Вт) 12:03

Re: Как отменить удаление obj-файлов?

Сообщение Old_Maple » 21.02.2019 (Чт) 15:42

The trick писал(а):(задекорированная)

Что это означает?
Veritas est aeterna!

The trick
Постоялец
Постоялец
 
Сообщения: 781
Зарегистрирован: 26.06.2010 (Сб) 23:08

Re: Как отменить удаление obj-файлов?

Сообщение The trick » 21.02.2019 (Чт) 16:06

Old_Maple писал(а):Что это означает?

https://en.wikiversity.org/wiki/Visual_ ... e_mangling
UA6527P

Old_Maple
Обычный пользователь
Обычный пользователь
 
Сообщения: 54
Зарегистрирован: 25.10.2016 (Вт) 12:03

Re: Как отменить удаление obj-файлов?

Сообщение Old_Maple » 21.02.2019 (Чт) 21:23

The trick писал(а):
Old_Maple писал(а):Что это означает?

https://en.wikiversity.org/wiki/Visual_ ... e_mangling

Спасибо за статью. Но, увы, вопросов меньше не стало. Хотелось, все-таки, средствами одного лишь VB6 обойтись.
Так все-таки есть опция отменяющая удаление obj- файлов после компиляции vb6 исходника и линковки *.obj?
Veritas est aeterna!

The trick
Постоялец
Постоялец
 
Сообщения: 781
Зарегистрирован: 26.06.2010 (Сб) 23:08

Re: Как отменить удаление obj-файлов?

Сообщение The trick » 22.02.2019 (Пт) 9:40

Old_Maple писал(а):Так все-таки есть опция отменяющая удаление obj- файлов после компиляции vb6 исходника и линковки *.obj?

Такая опция есть, но вроде как она никак не устанавливается, только перехватом TipMakeExe2 (это уже сделано в той тулзе что я показывал). Там вторым параметром идет указатель на структуру, в ней по смещению 4 хранятся разные флаги. Вот чтобы объектники (и другие служебные файлы) не удалялись должен быть установлен флаг 0x10.
UA6527P

Old_Maple
Обычный пользователь
Обычный пользователь
 
Сообщения: 54
Зарегистрирован: 25.10.2016 (Вт) 12:03

Re: Как отменить удаление obj-файлов?

Сообщение Old_Maple » 22.02.2019 (Пт) 10:54

Спасибо, The trick! Надеюсь от Вас узнать еще что-нибудь полезное. :)
Veritas est aeterna!

Old_Maple
Обычный пользователь
Обычный пользователь
 
Сообщения: 54
Зарегистрирован: 25.10.2016 (Вт) 12:03

Re: Как отменить удаление obj-файлов?

Сообщение Old_Maple » 26.02.2019 (Вт) 8:53

The trick, к сожалению файл static_link_test.rar не распаковывается моим rar'ом. Если возможность выложить этот же архив в формате zip?
Veritas est aeterna!

The trick
Постоялец
Постоялец
 
Сообщения: 781
Зарегистрирован: 26.06.2010 (Сб) 23:08

Re: Как отменить удаление obj-файлов?

Сообщение The trick » 26.02.2019 (Вт) 11:26

Прикрепил
Вложения
static link test.zip
(152.79 Кб) Скачиваний: 2089
UA6527P

Old_Maple
Обычный пользователь
Обычный пользователь
 
Сообщения: 54
Зарегистрирован: 25.10.2016 (Вт) 12:03

Re: Как отменить удаление obj-файлов?

Сообщение Old_Maple » 26.02.2019 (Вт) 12:06

The trick писал(а):Прикрепил

СПАСИБО!
Veritas est aeterna!


Вернуться в Visual Basic 1–6

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

Сейчас этот форум просматривают: Yandex-бот и гости: 66

    TopList