Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Переход на 64 офис, DLL в MS Excel!

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

Открыть новую тему     Написать ответ в эту тему

OleGator22

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
В 32 Excel на протяжении почти 10 лет создана большая вычислительная DLL, написана сначала в Delphi, а потом продолжена в RAD Sudio XE-5...  Я перешел на платформу 64 внутри XE-5, это легко, перекомпилировалось все просто, пару других модулей пере подключено и все!
 
Увы когда то радость заканчивается! И вопрос уже не только в разнице объявлений, это сделано! Но и здесь могут быть нюансы какие то! В Excel ф-ции выдают  ЗНАЧ !
 
Вот сделано, классика в переходе на 64 офис:
 
#If VBA7 Then
' // 20-03-2019 Расчет т-ры г/о  - для подборов!
Public Declare PtrSafe Function ТСго3ф Lib "C:\InfoCalc\FuncExcel\LibXLS\PhChProp.dll" Alias "f_Calc3f_hydr_form" _
      (Массы_i As Variant, _
       Свойства As Variant, _
       ВМР As Variant, _
       ByVal TC As Double, _
       ByVal Paта As Double, _
       Optional ByVal Алгоритм As LongPtr = 0) As Double  
...
А похоже (думаю в этом причина!) в том, что не работает ранее работающая внутри дельфи обработка диапазонов...
В дельфи активно работает процедура преобразователь типа: RangeToVector()
 
Function f_Calc3f_hydr_form(
        const pWp_v, pArNSI, pWpi_WMS:Variant;
        const pTC, pPa:Double;       // термобар. условия...
        const pAlg:byte = 0          // Алг. расчета!
        ):Double; stdcall;
 
Begin
//
    RangeToVector(pWp_v, Gi);    //  то вернем этот оператор ввода масс комп-тов!
    RangeToVector(pWp_v, Wpi);
    DoNorma100prc(Wpi);
...
End;
 
Это сложная обработка, я ее взял из другого форума, который как то не отвечает! Вот ее код, он ранее четко и быстро работал! Великолепно обрабатывал массивы чисел в виде диапазонов из Exel в массивы внутрь дельфи! Сейчас не пашет! Возможно что то еще? Но что? Есть подобная обработка и для матрицы, то есть двумерного диапазона...
 
MTvector = array of Double;      // объявлено в другом модуле...
 
{=
  Данная процедура предназначена для преобразования варианта-диапазона
  из Excel в типовой вектор данных!
=}
procedure RangeToVector(const rango: variant; var matriz: MTVector);
var
  Rows, columns: longint;
  i, j: longint;
begin
  if ((tvardata(rango).vtype and vararray) = 0) and
    ((tvardata(rango).vtype and vartypemask) = vardispatch) then
  begin
    Rows := Rango.count;
    SetLength(matriz, Rows + 1);     // здесь внесли изменения для перехода к [1..NN]
    for i := 1 to Rows  do
      matriz[i] := VarToDouble(Rango.cells[i]);
  end
  else if ((tvardata(rango).vtype and vararray) <> 0) then
  begin
    rows := vararrayhighbound(rango, 1) - vararraylowbound(rango, 1) + 1;
    if VarArrayDimCount(rango) = 1 then
    begin
      setLength(matriz, rows+1);
      for i := 1 to rows  do
        matriz[i] := vartodouble(rango[i]);
    end
    else
    begin
      columns := vararrayhighbound(rango, 2) - vararraylowbound(rango, 2) + 1;
      setlength(Matriz, Columns * Rows);
      for i := 1 to rows do
        for j := 1 to columns do
        try
          matriz[(i - 1) * columns + j] := VarToDouble(rango[i, j]);
        except
          on EVariantError do
            matriz[(i - 1) * columns + j] := 0;
        end;
    end
  end
  else
  begin
    rows := 1;
    setLength(matriz, rows+1);
    matriz[1] := vartodouble(rango);
  end;
//
end; //procedure RangeToVector
 
Изнутри тест проходишь в исполняемом режиме (тестирование п/п) - ничего не видно! Данные адекватно преобразуются, а в длл - в Excel все ломается!  
 
Увы под вопросом весь мой труд... Перелопачивать все в VBA, как то не айс! Может кто подскажет путь? Где тут подводные камни? Я не понимаю логику этих новых данных... Такой подход очень хорош! Не позволяет вредителям вломится в выч. процедуры!  
 
Если не трудно, помогите!
 
 
 
 
 
 

Всего записей: 1 | Зарегистр. 31-08-2022 | Отправлено: 08:58 31-08-2022
Открыть новую тему     Написать ответ в эту тему

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Переход на 64 офис, DLL в MS Excel!


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru