0. v77 148 17.02.11 16:11 Сейчас в теме

ВК NativeAPI на Delphi и FreePascal

1CNativeLib - бесплатная библиотека Delphi для создания внешних компонент (ВК) 1С по технологии Native API.
Новая версия.
16.12.2015 Исправлена ошибка: поиск свойств и методов ВК выполнялся с учетом регистра букв.
06.10.2015 Исправлена ошибка: сообщение "некорректная работа компоненты с памятью"

Перейти к публикации

Комментарии
Избранное Подписка Сортировка: Древо развёрнутое
Свернуть все
206. user1407151 15.05.20 21:40 Сейчас в теме
(202)
Смотрите ответы здесь (148), (203) и (204)
это поможет вам запустить на 64-разрядной платформе
а потом уже (197), это решит проблемы с вылетом 32-разрядной платформы
198. Prisian 09.01.20 19:16 Сейчас в теме
Написал ДЛЛ по Требования к разработке драйверов подключаемого оборудования (версия 2.4). Обязательная функция GetVersion(ПолучитьНомерВерсии) не имеет параметров, но должна возвращать строковое значение. Так у меня ложится 1С после выполнения метода.
Вот код, может подскажите как сделать так, чтобы 1С не вылетала.

function TMyClass.GetVersion(RetValue: PV8Variant; Params: PV8ParamArray;  const ParamCount: integer; var v8:TV8AddInDefBase): string;
begin
  //SetParamAString(pChar('1.0.0.1'), 1, Params);
  //V8SetString(RetValue, '1.0.0.1');
  result := '1.0.0.1';
  //GetVersion:= '1.0.0.1';
end; 

.
.
.
begin
  with ClassRegList.RegisterClass(TMyClass, 'ScalePromDeviceNative', 'TMyClass') do
  begin
    AddFunc('GetVersion', 'ПолучитьНомерВерсии', @TMyClass.GetVersion, 0);
  end;
end.
Показать
199. Prisian 11.01.20 21:12 Сейчас в теме
Можете скинуть новый v8napi.pas от 16.12.2015 в личку. Старый от 12 года есть, но на нем указанный выше метод не работает, 1С вылетает. Заранее благодарен. Ну или хотябы функцию V8AllocWideString(). Я так понимаю, что из-за нее не работает.
200. Prisian 15.01.20 14:38 Сейчас в теме
(199) Поборол. Оказывается, что нужно просто установить тип возвращаемого значения функции в булево, а само значение передавать как строковое:
function TMyClass.GetVersion(RetValue: PV8Variant; Params: PV8ParamArray;  const ParamCount: integer; var v8:TV8AddInDefBase): boolean;
begin
  V8SetString(RetValue, '1.0.0.1');
  result := true;
end; 


Походу само описание требований сбило с толку. Там сказано, что Тип возвращаемого значения STRING. Поэтому и понял неверно.
Greysvandir; +1 Ответить
204. user1407151 14.05.20 22:12 Сейчас в теме
(199)
Не знаю как в оригинале, но можно вот так

function TV8UserObject.V8AllocWideString(Value: WideString): PWideChar;
var
  L: integer;
begin
  result := nil;

  L := Length(Value);
  L := L + L + 2;
  if V8MM <> nil then
    if V8MM.AllocMemory(*result, L) then
    begin
      Move(Value[1], result^, L);
    end;
end;
Показать
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Автор новостных обзоров на тему 1С и бухучета
Санкт-Петербург
По совместительству

Программист 1С
Санкт-Петербург
зарплата до 150 000 руб.
Полный день

Программист 1С
Екатеринбург
зарплата от 80 000 руб. до 130 000 руб.
Полный день

Ведущий программист 1С
Москва
зарплата от 150 000 руб.
Полный день

Ведущий программист 1С (УТ 11)
Москва
зарплата до 200 000 руб.
Полный день