адрес структуры это понятно - он собственно передается на вход функции реализующей функциональный блок. завтра на работе посмотрю. а как узнать реальный адрес экземпляра?
адрес структуры это понятно - он собственно передается на вход функции реализующей функциональный блок. завтра на работе посмотрю. а как узнать реальный адрес экземпляра?
вижу одинаковый адрес 20093350. скрин кода и выполнения в приложении
04_vs6_lib_ptr.PNG 05_csy_ptr_eq.PNG
а вот адрес внутри структуры оказался смещен. мне надо менять выравнивание в структуре на 2? т.е. делать меньше. сейчас видимо у меня выравнивание 4 байта, а в КДС 2 или по размеру типа.
Вложение 29263
поменял выравнивание на 2. непомогло. очевидно в VS размер типа INT - 4 байта. а где это в VS задается? я инклудил wtypes.h. (http://www.owen.ru/forum/attachment....8&d=1486369345) а какой надо было?
а где всетаки описаны типы вроде INT? какой хидер нужно подключать? т.к. мне кажется это из-за того что VS скомпилировал структуру исходя из размера INT 4 байта а не 2 байта.
Завтра попробую запись в адрес на работе.
вывел из си в КДС размер типа INT - выдал 4 - нужен правильный хидер в котором будет сказано что INT размером в 2 байта (и соотв. остальные типы как надо)
записал в Си напрямую в адрес *((byte*)inst + 4) = (byte)55; - получил в КДС на выходе LIB_TEST1.out1 == 55 т.е. в библиотеке Си другой размер типов. нужен правильный хидер. +4 потому, что в структуре перед out1 находится 2 in'а т.е. 2*2байта=4байта до начала out1 с точки зрения КДС.
поискал в INCLUDE в VS6 - там нет других описаний типа INT кроме как в wtypes.h. где же его взять? Пробовал в VS ставить платформу 386 - все равно размер INT 4 байта.
или вручную указать другие типы данных для структуры в Си чтобы они совпали с размерами КДС?
Последний раз редактировалось sas7; 09.02.2017 в 10:23.
typedef short INT; и т.д. работает КДС показывает одинаковые значения указателей внутренних элементов. ФБ возвращает значение в out
в интернетах пишут про заголовочный файл CmpStd.h - он есть в платном тулките и там вроде есть описания типов. Кто нибудь может им поделиться?
Еще вопрос: Созданная таким образом библиотека работает. Но работает только с OBJ созданным в режиме Debug. Если делать Release КДС компилирует проект, загружает, но при запуске выдает ошибку Unresolved external POUs и перечисляет все функции и ФБ моей библиотеки.
В интернете пишут надо сохранить LIB файл с типом Internal Library. У меня есть только тип Internal v 2.2. Сохранил LIB internal 2.2 - проект с Release OBJ скомпилировался, загрузился, выполняется, НО ничего из функций и ФБ не возвращается, адрес КДС элемента структуры ФБ равен 0. Функции тоже возвращают нули.
Что можно сделать чтобы заработало с Release OBJ?
нули internal показывает возможно потому, что исполняет пустой код созданный в проекте библиотеки КДС а не внешний obj. Internal library v.2.3 это видимо просто internal library без версии в списке выбора типа сохранения.
Итого как запустить release OBJ пока под вопросом
да, сделал сам сопоставление типов - все работает.
про release - вроде все так же как и в debug но вот неработает. есть подозрение может КДС пользуется отладочной информацией чтобы выполнять (находить точку входа) биб-ку и по-этому неможет запустить релиз. а дебаг содержит исходный код.. а этого в том числе и хочется избежать (чтобы без детских паролей было).
на оф.форуме меня пока не авторизовали - как включат, напишу туда