|
Внешняя компонента для 1С | ☑ | ||
---|---|---|---|---|
0
ozon0
20.05.15
✎
16:39
|
Разбираюсь с технологией создания внешних компонент по статье http://habrahabr.ru/post/191014/. С С++ дела имел давно, пытаюсь разобраться.
Пример, данный автором я успешно подключил, пытаюсь сделать из него что-то свое. В примере есть функция: bool CAddInNative::wstring_to_p(std::wstring str, tVariant* val) { char* t1; TV_VT(val) = VTYPE_PWSTR; m_iMemory->AllocMemory((void**)&t1, (str.length()+1) * sizeof(WCHAR_T)); memcpy(t1, str.c_str(), (str.length()+1) * sizeof(WCHAR_T)); val -> pstrVal = t1; val -> strLen = str.length(); return true; } Как я понимаю, она получает строку str и записывает ее в val, 1c получает val и уже в 1с я получаю ее значение. Пытаюсь переписать функцию для работы с числами. Если я внутри функции создаю переменную: bool CAddInNative::wstring_to_p(double str, tVariant* val) { char t1 = 10; TV_VT(val) = VTYPE_R8; val -> dblVal= t1; return true; } все прекрасно работает. Но как мне получить str и передать ее в val? В случае со строками это делает m_iMemory->AllocMemory((void**)&t1, (str.length()+1) * sizeof(WCHAR_T)) - выделяет память и memcpy, копирует str в t1. Пробую переписать их для double: bool CAddInNative::wstring_to_p(double str, tVariant* val) { double* t1; double *ptr = &str; TV_VT(val) = VTYPE_R8; m_iMemory->AllocMemory((void**)&t1, sizeof(double)); memcpy(t1, ptr, sizeof(double)); val -> dblVal = *t1; //val -> strLen = str.length(); return true; } Но в 1с передается 0.00..1. Повторюсь, с++ успел забыть, подскажите как переделать функцию. |
|||
1
DmitrO
20.05.15
✎
16:45
|
для double выделять память не надо, просто так:
double t1 = 23.9; TV_VT(val) = VTYPE_R8; val -> dblVal = t1; |
|||
2
DmitrO
20.05.15
✎
16:47
|
значение простых типов хранятся inplace, в самом Variant.
|
|||
3
DmitrO
20.05.15
✎
16:47
|
tVariant
|
|||
4
ozon0
20.05.15
✎
16:54
|
(1) так у меня работает, а если я пишу
double t1 = str; TV_VT(val) = VTYPE_R8; val->dblVal = t1; то выдает 0.00..1; |
|||
5
H A D G E H O G s
20.05.15
✎
17:02
|
Каким только извратом не занимаются c++, пытаясь реализовать то, что в Дельфи работает автоматом. :-)
|
|||
6
ozon0
20.05.15
✎
17:27
|
Разобрался. Я в 1С передаю компоненте значение 2, а надо именно double - 2.22 например. При это 2.00 тоже не работает. Вопрос - как работать и с целыми, и с плавающей точкой?
|
|||
7
Serginio1
20.05.15
✎
17:32
|
Decimal
|
|||
8
Serginio1
20.05.15
✎
17:38
|
||||
9
ozon0
20.05.15
✎
17:51
|
(7) 1C такого не знает
Соответствие типов tVariant и 1С:Предприятия Тип tVariant объявлен в файле types.h (входит в комплект поставки). VTYPE_EMPTY соответствует неопределенному значению. При передаче в качестве параметра метода подставляется значение параметра по умолчанию; начения типа VTYPE_I2, VTYPE_I4, VTYPE_ERROR, VTYPE_UI1 соответствуют целочисленному значению и находятся в lVal; начения типа VTYPE_BOOL, соответствуют булевому значению и находятся в bVal; начения типа VTYPE_R4, VTYPE_R8, VTYPE_CY соответствуют дробному значению и находятся в dblVal; начение типа VTYPE_DATE соответствует значению даты и находится в date; начение типа VTYPE_TM соответствует значению даты и находится в struct tm tmVal; начение типа VTYPE_PSTR соответствует строковому значению (char*) и находится в pstrVal с указанием длины в strLen; начение типа VTYPE_PWSTR соответствует строковому значению (WCHAR_T*) и находится в pwstrVal с указанием длины в wstrLen; начение типа VTYPE_BLOB соответствует двоичным данным и находится в pstrVal с указанием длины в strLen; Типы VTYPE_INTERFACE, VTYPE_VARIANT не поддерживаются. |
|||
10
Serginio1
20.05.15
✎
17:59
|
(9) Восьмерка поддерживает Decimal в вариантах COM точно. Проверял. Проверь в ВК
|
|||
11
Serginio1
20.05.15
✎
18:03
|
Да и ВК поддерживают https://infostart.ru/public/332786/
|
|||
12
ozon0
20.05.15
✎
19:06
|
(11) Я делаю Native API
|
|||
13
su_mai
20.05.15
✎
19:17
|
||||
14
ozon0
20.05.15
✎
19:46
|
(13) Читал статью, очень помогла. Она очень общая, или я не так читаю.
|
|||
15
Serginio1
20.05.15
✎
21:25
|
(12) Передавай как строку
|
|||
16
Бертыш
21.05.15
✎
03:26
|
Мне вот тоже жутко интересно создание своей компоненты по 1С 8, но мне интересно создание компоненты которая будетработать во всех вариантах....
Толстый клиент Windows Linux Тонкий клиент Windows Linux Web-клиенты Куда мне рыть??? Что читать?? |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |