Вопрос по DLL

 

Есть DLL написанная в Delphi6 

library Project2;

uses
  Windows,
  Dialogs,
  SysUtils,
  Classes;

{$R *.res}



procedure trends(a:double; out b:double); stdcall;
begin
  b:=a+100;
  ShowMessage('fff fff!');
end;

exports
  MsgBox,
  trends;


begin

end.

 

В MQL вызываю так:

 

 

double a;

 double b;

 a = 0.1;

 trends(a, b);

 Print(b);

Но процедура  trends(a, b); не возвращает b, возникает ошибка 2013.04.24 01:47:26 myDll USDCHF,H1: function 'trends' call from dll 'Project2.dll' critical error c0000005 at 02F1218F.

Как сделать чтобы procedure trends(a:double; out b:double); stdcall; возвращала значение b ?
 

а функцией ее вы не пробовали?

function trend(a:double):double; stdcall;
begin
  result:=a+100;
end;

 http://www.delphisources.ru/pages/faq/file_system.html

 
А если так procedure abc(a:double; out b:double; out c:tdatetime); Тогда как?
 
abc(a:double; var b:double; var c:tdatetime);
не пробовали?
 

используй var вместо out

у меня работает

 
покопайся на форуме, я выкладывал шаблон многопоточной dll для Delphi
 
Debugger:
покопайся на форуме, я выкладывал шаблон многопоточной dll для Delphi


Нашел вот ваш пост https://www.mql5.com/ru/forum/125772/page2, где написано :

из хелпа

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 outparameter 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 тоже передает по ссылке.

 

Пока не пойму только как передать по ссылке 

 

кстати с var не работает тоже почемуто у меня 

 

если возвращаешь одно значение, простой тип-значение, то делай это через return

если массив, то через ссылку во входных параметрых функции. 

 
несколько значений разного типа
 

решил взять эту же dll и попробовать присобачить к своему приложению.

Вот так не работает

 

procedure trends(a:double; var b: double); external 'Project2.dll';

 

А вот так работает:

 

procedure trends(a:double; var b: double); stdcall; external 'Project2.dll';

так что то чего я пытаюсь добиться  в mql4 невозможно 

 
Ну скажите что я не прав чтоли :))
Причина обращения: