Billy
https://cpplang.now.sh/
походу дела, это трабла в артифактори, но доказать пока не могу. устрою аццкое разбирательство скоро с логами и бубном :)
RaFaeL
так мне у себя надо очистить
Igor
создать объект options, запихнуть в него x,y,scale,scale, забить нулями все остальное, отправить в длл
RaFaeL
правильно
RaFaeL
сколько остальное?
RaFaeL
ладно зайдем с другой стороны
Igor
выше ж написал, sizeof(lxw_image_options) - offset
Igor
offset - длина блока памяти под первые четыре поля
RaFaeL
есть mingw и msys
RaFaeL
где там че выполнить это можно?
Igor
прошу прощения, а где именно "у себя" надо очистить?
RaFaeL
в программе моей ) она на кларионе
RaFaeL
к ней линкуется dll на С
Igor
вотэтоповорот.jpg ну тогда нужно начать с того, что кларион знает про структуру lxw_image_options
RaFaeL
ничего не знает
RaFaeL
я там создаю свою, передаю указатель в dll на адрес структуры в памяти
RaFaeL
т.е. мне надо создать структуру того же размера
Anatoly
я там создаю свою, передаю указатель в dll на адрес структуры в памяти
скажи, а кто тебе передал этот кусок заголовочного файла? нет ли там #pragma pack и т.п.? просто по умолчанию компилятор с целью оптимизации доступа может размещать данные структур, исходя из своих представлений.
Igor
бедные программисты на кларионе sizeof.c #include <stdio.h> #include <хедер в котором описана lxw_image_options> int main() { lxw_image_options size_t offset = sizeof(int32_t)*2 + sizeof(double)*2; printf("%d\n", sizeof(lxw_image_options) - offset); return 0; }
RaFaeL
это опен сурс с гитхаба
RaFaeL
пака нет, про паддинг я уже прочитал
Anatoly
пака нет, про паддинг я уже прочитал
тогда иди https://ideone.com/ вбивай структуру и выводи размер структуры "std::cout « sizeof(lxw_image_options);"
Anatoly
дальше выдели память под удвоенный размер, обнули его (заполни \0) и подбирай значения
RaFaeL
есть mingw и msys я в них это собирал в dll по мануалу )
RaFaeL
как там test.c быстро выполнить?
Anatoly
ладно, а ссылка на гитхаб этого проекта у тебя есть?
Igor
как там test.c быстро выполнить?
gcc -Iпуть/к/папке/с/заголовками sizeof.c -o sizeof.exe
RaFaeL
#include <stdio.h> #include <xlsxwriter/worksheet.h> int main() { lxw_image_options printf("%d\n", sizeof(lxw_image_options)); return 0; } syntax error before string constant где-то опечатка?
🦥Alex Fails
удоли lxw_image_ioptions до printf'а
RaFaeL
104
RaFaeL
так я и руками насчитал 104 перед этим
RaFaeL
а оно все равно крэшится (
RaFaeL
ну 24 и 80 хвост
RaFaeL
первые 4 поля это 24 тут вроде понятно
RaFaeL
так и придется ждать фикса похоже
Berkus
а копируют они сколько в дллке?
RaFaeL
https://github.com/jmcnamara/libxlsxwriter/issues/145
Berkus
не важно ж какой там размер структуры на самом деле
Berkus
https://github.com/jmcnamara/libxlsxwriter/issues/145
ну вот тебе ж явно сказали забивать остаток нулями
Berkus
сделай my_options_struct, первые четыре поля дергай из оригинальной структуры, остальное забивай нолями
RaFaeL
да я так и сделал сейчас но че та все равно ен работает
Berkus
покажи как сделал
RaFaeL
XLSX:imageoptions GROUP,TYPE x_offset LONG y_offset LONG x_scale REAL y_scale REAL tail STRING(80) END
RaFaeL
xlsxwriter.InsertChart PROCEDURE(LONG row_,SHORT col_,LONG chart_,<LONG x_offset_>,<LONG y_offset_>,<REAL x_scale_>,<REAL y_scale_>) options GROUP(XLSX:IMAGEOPTIONS) END CODE options.tail=all('<0>',80)
RaFaeL
это кларион если че )
Berkus
а по клариону известно какого размера поля типов LONG и REAL?
RaFaeL
4 и 8
RaFaeL
это все передается и работает
RaFaeL
только иногда крэш на некоторых компах
RaFaeL
видимо зависит от того что в памяти за мусор
Berkus
CODE options.tail=all('<0>',80) это выполняется ДО вызова внешней функции или после?
RaFaeL
до
Anatoly
до
а string(80) - это просто линейный массив символов?
Anatoly
или это что-то динамическое?
RaFaeL
линейный массив символов
RaFaeL
не указатель
$continue$
Есть какая то инфа, когда обновление crypto++?
Berkus
линейный массив символов
у него там нету никакого счетчика ни с какой стороны?
Berkus
то есть он эквивалентен char[80]?
RaFaeL
null terminated это CSTRING
RaFaeL
а STRING это char да
RaFaeL
просто 80 байтиков
RaFaeL
ну это кларион
RaFaeL
что тут странного? )
Anatoly
а есть что-то вроде online описания языка clarion?
Berkus
параметры не совпадают с сишным апи
RaFaeL
так это моя
RaFaeL
xlsxwriter.InsertChart PROCEDURE(LONG row_,SHORT col_,LONG chart_,<LONG x_offset_>,<LONG y_offset_>,<REAL x_scale_>,<REAL y_scale_>) options GROUP(XLSX:IMAGEOPTIONS) END CODE options.tail=all('<0>',80) if omitted(5) and omitted(6) and omitted(7) and omitted(8) ret#=worksheet_insert_chart(SELF.ActiveWorksheet,row_-1,col_-1,chart_) else if ~omitted(5) options.x_offset=x_offset_ end if ~omitted(6) options.y_offset=y_offset_ end if ~omitted(7) options.x_scale=x_scale_ else options.x_scale=1 end if ~omitted(8) options.y_scale=y_scale_ else options.y_scale=1 end ret#=worksheet_insert_chart_opt(SELF.ActiveWorksheet,row_-1,col_-1,chart_,options) end return ret#
RaFaeL
вот полный вариант, внизу вызов апи
Berkus
ага
Anonymous
Ему бы чатец по клариону его.
Berkus
ну я не вижу ничего особо криминального в твоем кодеце...
RaFaeL
там я уже спрашивал )
Berkus
есть вариант что эта сишная либа очень кривая и там есть еще где упасть