Здравствуйте.
Требуется передать структуру в самописную dll.
Раньше использовал такой прием: делал нужную мне структуру, затем делал другую структуру, в которой был байтовый массив. И преобразовывал одну к другой.
Но сейчас компилятор ругается на операцию присвоения.
В чем может быть ошибка и как исправить?
Пример кода:
struct transaction_t
{
int type; // 4
};
struct transaction_ref_t{
uchar ref[4];
};
void OnStart()
{
transaction_t trans;
transaction_ref_t ref;
ref = trans;
}
В локальной справке читаем
Приведение данных типа простых структур
Данные типа простых структур можно присваивать друг другу только в том случае, если все члены обеих структур имеют числовые типы. При этом в операции присваивания оба операнда, и слева и справа, должны быть типа структур. Как такового почленного приведения не производится, производится простое копирование. Если размеры структур отличаются, то копируется количество байт, соответствующее меньшему размеру. Таким образом компенсируется отсутствие объединений (union) в языке MQL5.
Для того чтобы передать структуру в DLL, нет необходимости преобразовывать её в массив.
struct MyStruct { int a; int b; int c; }; #import "MyDLL.dll" void func( MyStruct& s ); #import void OnStart() { MyStruct struct1; struct1.a = 1; struct1.b = 2; struct1.c = 3; func( struct1 ); }
Для того чтобы передать структуру в DLL, нет необходимости преобразовывать её в массив.
Гениально и просто.
Для того чтобы передать структуру в DLL, нет необходимости преобразовывать её в массив.
Всем спасибо за ответ.
В итоге переделал так:
struct transaction_t
{
int type; // 4
};
union transaction_union_t {
transaction_t tran;
uchar ref[4];
};
void OnStart()
{
//---
transaction_t trans;
transaction_union_t uni;
uni.tran = trans;
}
Всем спасибо за ответ.
В итоге переделал так:
struct transaction_t
{
int type; // 4
};
union transaction_union_t {
transaction_t tran;
uchar ref[4];
};
void OnStart()
{
//---
transaction_t trans;
transaction_union_t uni;
uni.tran = trans;
}
Зачем тут union, если можно просто передать структуру?
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Здравствуйте.
Требуется передать структуру в самописную dll.
Раньше использовал такой прием: делал нужную мне структуру, затем делал другую структуру, в которой был байтовый массив. И преобразовывал одну к другой.
Но сейчас компилятор ругается на операцию присвоения.
'=' - illegal operation use
В чем может быть ошибка и как исправить?
Пример кода:
struct transaction_t
{
int type; // 4
};
struct transaction_ref_t{
uchar ref[4];
};
void OnStart()
{
transaction_t trans;
transaction_ref_t ref;
ref = trans;
}