Тема: Проблема передачи массива из VBA приложения в DLL C++

Господа, подскажите пожалуйста, как передать динамический массив из VBA макроса в DLL, написанную на C++. Массив в DLL после передачи содержит всякий мусор, а не то что я передаю.
Объявление и вызов функции из DLL в VBA у меня такие:
Public Declare Sub MyDllFunction Lib "Project1.dll" (MyArray() As Double)
.
.
.
Public Sub MySub()
  Dim array() As Double
.
.
.
  ReDim array(0 To n)
.
.
.
  MyDllFunction(array)
End Sub
//__________________________________________________________________________
В C++ DLL экспортируемая функция имеет следующий код
extern "C" __declspec(dllexport) void __stdcall MyDllFunction(double *CongArray);
void __stdcall MyDllFunction(double *CongArray)
{
  .
  .
  .
//Здесь CongArray содержит всякую хрень, но только не то, что я передавал.
}

Re: Проблема передачи массива из VBA приложения в DLL C++

Такие штучки скорее вышибают программу напрочь, чем передают всякую хрень.
Надо передавать адрес первого элемента массива.

Re: Проблема передачи массива из VBA приложения в DLL C++

Попробуй через файл, отображаемый в память(Memory mapped files). Когда-то давно такое делал для Мапинфовского мапбейсика и ДЛЛ на Дельфи. Работало. Только с соответствием типов данных С и Васика поосторожнее.

Re: Проблема передачи массива из VBA приложения в DLL C++

> GIDRA
А как в Мапбейсике вы работали с memory mapped file ? Очень интересно. Кстати, какая была версия мапбейсика ?

Re: Проблема передачи массива из VBA приложения в DLL C++

все(!!!) массивы басика основаны на структуре SafeArray...
от этого и надо отталкиваться.
http://www.rsdn.ru/article/com/varsafearr.xml

Re: Проблема передачи массива из VBA приложения в DLL C++

Женек!!! Чего увял??? Ты что нибудь попробовал??? А то мы тут уже далеко полезли.

Re: Проблема передачи массива из VBA приложения в DLL C++

Раскажите пожалуйста по-подробнее.
Я передаю одномерный масив Double из VBA макроса в DLL, написанную на C++, DLL получает какуюто муть. Причем я пробовала описать принимаемый массив в DDL как  SafeArray , все-равно муть. Помогите. пожалуйста!

Re: Проблема передачи массива из VBA приложения в DLL C++

вот так работает у меня, правда я получаю массив от другого объекта, но смысл-то однотипен:
VARIANT IDictionary::GetKey(long Index)
{
  SAFEARRAY *pArr;
  VARIANT pVar;
  VARIANT result;
  HRESULT hr;
  pVar = IDictionary::Keys();
  pArr = pVar.parray;
  hr = SafeArrayGetElement(pArr, &Index, &result);
  if (FAILED(hr))
    VariantClear(&result);
  return result;
}