Добрый день.
Подскажите, пожалуйста, как передать нужный тип данных в DLL c 1C?
Есть код 1С
AnvizNew = new COMОбъект("DynamicWrapperX");
AnvizNew.Register("c:\dll\tc400.dll", "CKT_RegisterNet" , "i=ls", "r=l");
ret = AnvizNew.CKT_RegisterNet(IDNumber, Net_); /// это работает
if (ret = 0) then
Message("Connection Failed.");
else
Message("Connected.OK");
AnvizNew.Register("c:\dll\tc400.dll", "CKT_GetDeviceInfoEx" , "i=ll", "r=l");
ret = AnvizNew.CKT_GetDeviceInfoEx(IDNumber, devnfo ); /// это не работает
if ret>0 then
Message("CKT_ReportConnections ok.");
endif;
endif;
Показать
где тип переменной devnfo:
на VB6
Public Type DEVICEINFO
id As Long
MajorVersion As Long
MinorVersion As Long
SpeakerVolume As Long
Parameter As Long
DefaultAuth As Long
FixWGHead As Long
WGOption As Long
AutoUpdateAllow As Long
KQRepeatTime As Long
RealTimeAllow As Long
RingAllow As Long
DoorLockDelay As Long
AdminPassword As String * 8
End Type
Показать
на С#
[StructLayout(LayoutKind.Sequential, Size = 60, CharSet = CharSet.Ansi), Serializable]
public struct DEVICEINFO
{
public int ID;
public int MajorVersion;
public int MinorVersion;
public int SpeakerVolume;
public int Parameter;
public int DefaultAuth;
public int FixWGHead;
public int WGOption;
public int AutoUpdateAllow;
public int KQRepeatTime;
public int RealTimeAllow;
public int RingAllow;
public int LockDelayTime;
[MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 8)]
public byte[] AdminPassword;
}
(1) Ну очевидный же ответ, - сам даешь на свой вопрос ! Напиши DLL на VB с проблемным вызовом, или со всем необходимым кодом; Из 1С вызывай через свою DLL (COM - Объект)
(2) Структуру пробовал - не помогло..
ОШИБКА:
{ВнешняяОбработка.ВнешняяОбработка1.Форма.Форма.Форма(63)}: Ошибка при вызове метода контекста (CKT_GetDeviceInfoEx)
ret = AnvizNew.CKT_GetDeviceInfoEx(IDNumber,devnfo);
по причине:
Произошла исключительная ситуация (DynamicWrapperX.2): Тип аргумента неприводим к типу параметра
Еще я не уверен в правильном выборе типа в самом Врапе..
я указал
(5) Вот вы такие вопросы спрашиваете, а ведь я на самом деле не настоящий сварщик.
Неужели производитель только голые dll раздает?
Я без понятия что это вообще такое, но у них на сайте есть подозрительный раздел "Работа с модулем интеграции Anviz 1C"
ЗЫ. Хотя судя по скриншотам, они там тупо напрямую в базу ломятся за отчетами.
SDK состоит не только с голой ДЛЛ . (прикрепил к посту) есть примеры на нескольких языках, даже описание неплохое... но исходников основной библиотеки нет, и я не могу переписать эту функцию.
Да, на сайте есть что-то по работе с 1с - но платное..
Установил, но это приложение не работает как сервис. и вопросов по работе с базой CrossChex вообще не возникает. Но нужна обезьяна, которая будет нажимать на кнопку...
(15) Да, я уже понял. Не могу нормальной доки на девайс найти. Только парустраничный булшит. Но из него следует, что производитель предоставляет ему какую-то облачную поддержку, чтобы можно было им управлять через интернет. Это уже типа за деньги?
(17) Да ну. Этот SDK - это слишком низкий уровень для твоей задачи. Если для решения настолько типичной задачи нужно низкоуровневый middleware самому писать, то такому девайсу не выжить. Должен быть более высокоуровневый способ.
(21) партнеры Анвиза в Украине об этом пока не знают... молодые они. пока продают сами девайсы раздают сдк и напаривают платное ПО (даже расказать внятно не могут что оно может)...
передача параметров (вх/исх) в ком объекты только простые типы! В данном случае параметр DeviceInfo это ссылка на кусок памяти где расположена структура, только еще одна прослойка в виде ВК, чтобы конвертнуть для 1С в удобочитаемый формат.