Можно ли вернуть 2 одномерных массива из dll - страница 2

 
TheXpert писал(а) >>

Массивы всегда передаются по ссылке

"Функции, импортируемые из DLL в mql4-программу, должны обеспечивать соглашение о связях, принятое для функций Windows API. Для обеспечения такого соглашения в исходном тексте программ, написанных на языках C или C++ используется ключевое слово __stdcall, которое является специфическим для компиляторов от фирмы Microsoft(r). Обсуждаемое соглашение о связях характеризуется следующим:
- вызывающая функция (в нашем случае mql4-программа) должна "видеть" прототип вызываемой (импортируемой из DLL) функции, для того чтобы правильно сложить параметры на стек;
- вызывающая функция (в нашем случае mql4-программа) складывает параметры на стек в обратном порядке, справа налево - именно в таком порядке импортируемая функция считывает переданные ей параметры;
- параметры передаются по значению, за исключением тех, которые явно передаются по ссылке (в нашем случае строк)
- импортируемая функция, считывая переданные ей параметры, сама очищает стек."

Я это понимаю так, что массив в функцию будет передан не как ссылка на начало массива, а как копия массива, которая будет удалена после выполнения функции. Единственный способ этого избежать - передача явно по ссылке.

 
попробую.
 
Debugger >>:
На указатели переделаю, а вот убраь изменение размеров никак.
Вобщем переделайте на указатели, выкладывайте код, будем смотреть.
api >>:

Я это понимаю так, что массив в функцию будет передан не как ссылка на начало массива, а как копия массива, которая будет удалена после выполнения функции. Единственный способ этого избежать - передача явно по ссылке.

:)

 
из хелпа

Out Parameters

An out parameter, like a variable parameter, is passed by reference. With an out parameter, however, the initial value of the referenced variable is discarded by the routine it is passed to. The out parameter is for output only; that is, it tells the function or procedure where to store output, but doesn't provide any input. 

Короче при использовании var и out параметры передаются по ссылке

Using const allows the compiler to optimize code for structured - and string-type parameters. It also provides a safeguard against unintentionally passing a parameter by reference to another routine. 

const тоже передает по ссылке.



 
Получается, что 2 массива нельзя вернуть из dll. С одним все работает замечательно.
  Ну по-крайней мере обычными способами вернуть.
 
С двумерными массивами у меня тоже не очень складывается, ну, по крайней мере через Паскаль.
 
Может кто скинуть рабочий вариант возврата вдух одномерных массивов из dll. 
Есть запасной вариант (склеять их в один), но это извините меня за выражение "через задницу".
Буду очень признателен.
 

Учите С. У меня в С проблем нет. А с Паскалем, к сожалению, помочь не могу.

 
Я так и подозревал, что это проблемы состыковки языков. Это не первая проблема состыковки языков.
Значит в С возвращает 2 массива? Я правильно понял?
Буду учить С
 

Да, возвращает.

Причина обращения: