Модераторы: MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> DLL для VBA (Excel). Проблема передачи массивов чисел в Delphi. Передача параметров-массивов в DLL 
:(
    Опции темы
OleGator08
Дата 28.5.2008, 09:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 14.1.2008
Где: Тюмень

Репутация: нет
Всего: нет



Здравствуйте!
Очень помогла тема http://forum.vingrad.ru/faq/topic-156830.html ...
Но остались проблемы... Найти решение нигде не могу, а быстро решить - тоже не получается... Надо передать массивы чисел из VBA кода в 
функцию dll на дельфи!
Вот пример...

В надстройке Excel код:
Код

Public Function ТФОК(Kotb As Double, kk As Object, tt As Object) As Double
Dim k() As Double
Dim t() As Double
Dim j As Integer
Dim i As Integer
Dim ti As Double
'
  j = -1
'
For i = 1 To UBound(kk())
  If tt(i) <> "" Then
    j = j + 1
    ReDim Preserve k(j)
    ReDim Preserve t(j)
    k(j) = CDbl(kk(i))
    t(j) = CDbl(tt(i))
  End If
Next i
'
  ti = SplineX3(Kotb, k(), t())'
  ТФОК = ti
'
End Function
'ShareFunc_K
Public Function КФОК(Tkip As Double, tt As Object, kk As Object) As Double
Dim k() As Double
Dim t() As Double
Dim j As Integer
Dim i As Integer
Dim ki As Double
'
  j = -1
'
For i = 1 To UBound(kk())
  If tt(i) <> "" Then
    j = j + 1
    ReDim Preserve k(j)
    ReDim Preserve t(j)
    k(j) = CDbl(kk(i))
    t(j) = CDbl(tt(i))
  End If
Next i
'Own cubic spline
  ki = SplineX3(Tkip, t(), k())
  If ki < 0 Then ki = 0
  If ki > 100 Then ki = 100
'
  КФОК = ki
'
End Function

 
Ф-ция SplineX3 спрятана в dll и объявлена следующим образом в надстройке Excel:
Код

' Function f_SplineX3(const v_x:Double; const v_xx, v_yy:Variant) :Double ;
Private Declare Function SplineX3 Lib "C:\Calc\LibXLS\LibProperty.dll" Alias "f_SplineX3" _
(ByVal vX As Double, v_XX As Variant, v_YY As Variant) As Double


Делов том, что по сути эти массивчики  v_XX и  v_YY являются Double! И пробовал по всякому сделать это обявление и реализацию в дельфи, но что то не получилось...
Код

Function f_SplineX3(const v_x:Double; const v_xx, v_yy:Variant) :Double ;
begin
    //ar_X, ar_Y
    RangeToVector_M(v_xx, ar_X);
    RangeToVector_M(v_xx, ar_Y);
    Result := SplineX3(v_x, ar_X, ar_Y);
end; //Function f_SplineX3() :Double ;

procedure RangeToVector_M(const rango: variant; var matriz: TNvector);
var
  Rows, columns: longint;
  i, j: longint;
begin
    Rows := VarArrayHighBound(rango,1);
    SetLength(matriz, Rows + 1);
        for i := 1 to Rows  do  matriz[i] := VarToDouble(Rango[i]);
end; //procedure RangeToVector

function VarToDouble(const dato: variant): double;
var
  temp: variant;
begin
  try
    temp := varastype(dato, vardouble);
  except
    on EVariantError do
    begin
      tvardata(temp).vtype := vardouble;
      tvardata(temp).vdouble := 0.0;
    end;
  end;
  VarToDouble := tvardata(temp).vdouble;
end; // function VarToDouble


Подскажите, пожалуйста, как же правильно передавать хотя бы одномерные (лучше динамические, но не обязательно...) массивчики чисел  в dll на дельфи? 

Неужели выход - только через строчку??? 

PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: ActiveX/СОМ/CORBA"

Rrader
Girder

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Delphi
  • Вопросы по SQL и вопросы по базам данных, не связанные с Delphi, задавать здесь

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Rrader, Girder.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: ActiveX/СОМ/CORBA | Следующая тема »


 




[ Время генерации скрипта: 0.0599 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.