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
т.е. мне надо создать структуру того же размера
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
дальше выдели память под удвоенный размер, обнули его (заполни \0) и подбирай значения
RaFaeL
RaFaeL
есть mingw и msys я в них это собирал в dll по мануалу )
RaFaeL
как там test.c быстро выполнить?
Anatoly
ладно, а ссылка на гитхаб этого проекта у тебя есть?
RaFaeL
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 перед этим
Igor
RaFaeL
а оно все равно крэшится (
Igor
RaFaeL
ну 24 и 80 хвост
RaFaeL
первые 4 поля это 24 тут вроде понятно
RaFaeL
так и придется ждать фикса похоже
Berkus
а копируют они сколько в дллке?
RaFaeL
https://github.com/jmcnamara/libxlsxwriter/issues/145
Berkus
не важно ж какой там размер структуры на самом деле
Berkus
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
или это что-то динамическое?
Berkus
RaFaeL
линейный массив символов
RaFaeL
не указатель
$continue$
Есть какая то инфа, когда обновление crypto++?
Berkus
то есть он эквивалентен char[80]?
RaFaeL
null terminated это CSTRING
RaFaeL
а STRING это char да
RaFaeL
просто 80 байтиков
Berkus
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
есть вариант что эта сишная либа очень кривая и там есть еще где упасть