Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Пиши программы на заказ. Зарабатывай с помощью сервиса Фриланс!
hrustbb
45
hrustbb 2013.04.23 19:51 

Есть 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 ?
Рустам
3597
Рустам 2013.04.23 23:13  

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

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

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

hrustbb
45
hrustbb 2013.04.24 04:23  
А если так procedure abc(a:double; out b:double; out c:tdatetime); Тогда как?
Рустам
3597
Рустам 2013.04.24 05:54  
abc(a:double; var b:double; var c:tdatetime);
не пробовали?
Debugger
2501
Debugger 2013.04.24 06:39  

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

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

Debugger
2501
Debugger 2013.04.24 06:39  
покопайся на форуме, я выкладывал шаблон многопоточной dll для Delphi
hrustbb
45
hrustbb 2013.04.24 11:07  
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 не работает тоже почемуто у меня 

Debugger
2501
Debugger 2013.04.24 11:55  

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

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

hrustbb
45
hrustbb 2013.04.24 12:03  
несколько значений разного типа
hrustbb
45
hrustbb 2013.04.25 15:54  

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

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

 

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

 

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

 

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

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

hrustbb
45
hrustbb 2013.04.25 20:28  
Ну скажите что я не прав чтоли :))
/ /12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий