параметры-переменные функции ДЛЛ в Дельфи

 

Доброго времени!

Делаю ДЛЛ в Дельфи для МТ4

Сейчас надо принять из функции 3 целых числа

Делфи:

function ProcMT4_Sd(Oper: integer; var Oper1: integer; var Oper2: integer): integer; stdcall;


МТ4:

#import "PdllMT4.dll"
int ProcMT4_Sd(int Oper, int& Oper1, int& Oper2);
#import

. . .

WriteFxPew = ProcMT4_Sd(OperBar, OperRead, OperWrite);

Выдает:

2011.09.15 20:05:46 fxMT4 EURUSD,M1: function 'ProcMT4_Sd' call from dll 'PdllMT4.dll' critical error

Если передавать не по ссылке, то все работает

Что может быть не так??

 

Что не так не знаю.

Т.к. делфисты молчат, отвечу альтернативой -- передавать указатель.

 
TheXpert:

Что не так не знаю.

Т.к. делфисты молчат, отвечу альтернативой -- передавать указатель.


Не-е ... Тогда-то все и ломается, как я понял.

А если передавать значение,- то все зашибись.

Ввод: напортачено в подпрограмме (извините за малограмотность - не знаю как ее лучше назвать).

 
tara:

Не-е ... Тогда-то все и ломается, как я понял.

Я извиняюсь, вы ссылку от указателя отличаете?
 
TheXpert:
Я извиняюсь, вы ссылку от указателя отличаете?

Нет, конечно.

Я, в лучшем случае, способен отличить Static от Based (РL/1). Со ссылкой и с указателем, соответственно :)

 
tara:

Нет, конечно.

Оно и видно.
 
TheXpert:
Оно и видно.
Цитирую вопрос топикстартера:

Если передавать не по ссылке, то все работает

Что может быть не так??

Цитирую Ваш ответ:

передавать указатель.

Цитирую себя, любимого:

напортачено в подпрограмме

 

Спят усталые эксперты?

 
Arxan:

Доброго времени!

Делаю ДЛЛ в Дельфи для МТ4


Доброго времени!

Пробую так:

struct OperRes {
OperR, // Тип операции чтения
OperW, // Тип операции записи
OperRes: Integer;
}


Выдает:

'struct' - expression on global scope not allowed F:\MQL4\experts\fxMT4.mq4 (8, 1)
'struct' - variable not defined F:\MQL4\experts\fxMT4.mq4 (8, 1)


В МТ4 нет структур?

 
tara:


Не-е ... Тогда-то все и ломается, как я понял.

А если передавать значение,- то все зашибись.

Ввод: напортачено в подпрограмме (извините за малограмотность - не знаю как ее лучше назвать).


Кастрированную подпрограмму (ей не больно) привожу:

function ProcMT4_Sd(Oper: integer; var Oper1: integer; var Oper2: integer): integer; stdcall;

begin

Result := 10;
Oper1 := 11;
Oper2 := 12;

end;

Ошибка та же

Что здесь можно напортачить?

Как передавать данные из ДЛЛ?

Пока решил сделать шифр для связи с ДЛЛ

Но это СЕКРЕТ

 
почитайте статью https://www.mql5.com/ru/articles/96
Причина обращения: