Глюк с памятью? Или я чего не понимаю..

 
Господа разработчики! Разрулите, pls такую ситуацию (код специально упрощен, чтоб оставить только суть вопроса):

1. Вариант скрипта (tst1.mq4)

string   lsym = "";
 
string _GetVar(){
  return(lsym);   
}
 
int _SetVar(string sym){
    lsym = sym;
    Print("Sym:"+sym);
  return(1);
}
 
int start(){
  _SetVar(Symbol());
  Print(" os___:"+_GetVar());
}
Работает как и положено, т.е. выдаются такие сообщения в лог:
tst1 EURUSD,H1: removed
tst1 EURUSD,H1: os___:EURUSD
tst1 EURUSD,H1: Sym:EURUSD
tst1 EURUSD,H1: loaded successfully
Compiling 'tst1'

2. Вариант - функции _SetVar и _GetVar выносим во внешнюю библиотеку, т.е.
et1.mq4

#property library
 
string   lsym = "";
 
string _GetVar(){
  return(lsym);   
}
 
int _SetVar(string sym){
    lsym = sym;
    Print("Sym:"+sym);
  return(1);
}
и заголовок:
et1.mqh

#import "et1.ex4"
   string _GetVar();
   int _SetVar(string sym);
после чего в скрипте остается (tst.mq4)

#include <et1.mqh>
 
int start(){
  _SetVar(Symbol());
  Print(" os___:"+_GetVar());
}

Но вот результат выполнения - уже несколько иной:

tst EURUSD,H1: removed
et1 EURUSD,H1: removed
tst EURUSD,H1: os___:
et1 EURUSD,H1: Sym:EURUSD
et1 EURUSD,H1: loaded successfully
tst EURUSD,H1: loaded successfully

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

Дело в том, что сейчас есть ограничение на передачу объектов (а строка - это объект) из других импортированных библиотек. Суть проблемы в том, что код и данные испортируемой библиотеки загружаются в отдельное рабочее пространство. Я бы рекомендовал не импортировать EX4 библиотеки (это медленный путь, почти как загрузка COM объекта), а включать их полный исходный код через #include - так будет работать максимально быстро и в одном рабочем пространстве.
 
А где достать этот TST1 ?
Причина обращения: