Benim yaklaşımım. Çekirdek - Motor. - sayfa 99

 
Реter Konow :
Kısacası, kullanıcının değerindeki her değişiklikte. parametresine göre, bu değer birleşimdeki değişkenin değerine dönüştürülmeli ve hemen ortak bir bayt dizisinde saklanmalı, bu daha sonra uint'e dönüştürülmeli ve kaynağa yazılmalıdır.

Birleşim yapısı içinde bir kullanıcı parametresine sahip olmanız gerekir. Parametreyi değiştirdiğinizde, int dizisini değiştirirken yapı değişecektir.

union c
{
   uint i[ 2 ];
   long width ;
}cc;
 
cс. width = 200 ;

i[2] başka bir program tarafından okunan bir kullanıcı kaynağıdır.

Tek satır cc.width = 200 ile şunları değiştireceksiniz:

  1. Genişlikten sorumlu parametre,
  2. Bu parametreyi içeren yapı,
  3. Üçüncü taraf bir programın okuduğu bir kaynak dizisi

Ve burada dönüştürme ve kopyalama yok, sadece görüntüleniyor.
 
Vasiliy Sokolov :


Bağlantı Özellikleri dosyasındaki sarmalayıcı işlevlerini değiştirebilir ve her kullanıcıyı yayınlayabilirim. birlikten karşılık gelen değişkene değerler ve hareket halindeyken bir bayt dizisi oluşturun. Ancak aktarılması gereken metin değerleri de StringToChar() kullanılarak bir bayt dizisine dönüştürülmelidir.

Ancak aynı zamanda birlik kullanımı anlamını yitirmektedir. Sonuçta, hala StringToChar() kullanmam gerekiyorsa, neden her şeyi bir dizgede toplayıp sonra StringToChar() kullanarak tüm dizgiyi baytlara dönüştürmüyorum?

 
Vasiliy Sokolov :

Birleşim yapısı içinde bir kullanıcı parametresine sahip olmanız gerekir. Parametreyi değiştirdiğinizde, int dizisini değiştirirken yapı değişecektir.

i[2] başka bir program tarafından okunan bir kullanıcı kaynağıdır.

Tek satır cc.width = 200 ile şunları değiştireceksiniz:

  1. Genişlikten sorumlu parametre,
  2. Bu parametreyi içeren yapı,
  3. Üçüncü taraf bir programın okuduğu bir kaynak dizisi

Ve burada dönüştürme ve kopyalama yok, sadece görüntüleniyor.

Vasily, ikili işbirliğinden bahsettiğimizi unutuyorsun. Motorumda sendikalarla ilgili her şeyi yapabilirim ama kullanıcı kodundan sorumlu olamam. Yalnızca sarmalayıcılar bulabilir ve bunları içerme dosyalarına koyabilirim.

Kullanıcının birliği de kullanacağının garantisi nerede? Bu yüzden, sarmalayıcı işlevlerimi çağırdığında, ben de onun değerini almalı ve onu, içerme dosyası içindeki birliğimden değişkenlerimden birine atmalıyım.

 
Реter Konow :

Bağlantı Özellikleri dosyasındaki sarmalayıcı işlevlerini değiştirebilir ve her kullanıcıyı yayınlayabilirim. birlikten karşılık gelen değişkene değerler ve hareket halindeyken bir bayt dizisi oluşturun. Ancak aktarılması gereken metin değerleri de StringToChar() kullanılarak bir bayt dizisine dönüştürülmelidir.

Ancak aynı zamanda birlik kullanımı anlamını yitirmektedir. Sonuçta, hala StringToChar() kullanmam gerekiyorsa, neden her şeyi bir dizgede toplayıp sonra StringToChar() kullanarak tüm dizgiyi baytlara dönüştürmüyorum?

Çünkü çift ayrıştırma yapacaksınız. Her şeyi bir dizgeye dönüştüreceksiniz, çok yavaş. Sonra dizeyi bir diziye bölersiniz - çok hızlıdır. Sonra her şeyi hattan tekrar toplarsınız - hızlıdır. Sonra dizeyi gerekli türlere ayrıştırırsınız - çok yavaştır.

 
Реter Konow :

Tamam, peki ya metinler?

StringToChar() aracılığıyla baytlara dönüştürülmeleri gerekir. Sonuçta, sendika aracılığıyla imkansız gibi mi?

Evet, çevirmeniz gerekiyor, ancak ayrıştırmanın aksine hızlı.

 

Örneğin:

Bağlantı Özellikleri içerme dosyasındaki sarmalayıcı işlevi burada:

 string E_Last_10_bars_2_Close_price( string n = rare_value,   int Property = - 1 ){ return (GET_N_SET( 11 ,n,Property));}

Bu işlev şöyle adlandırılır:

E_Last_10_bars_2_Close_price( Close [ 2 ]);

Yani kullanıcı, tablo hücresini Kapat [ 2 ] olarak ayarlar.

 Close [ 2 ] - это значение дабл.

Bu nedenle, programındaki sarmalayıcı işlevimin içinde, ( Close [ 2 ] ) değerini bir char dizisi olarak temsil edebilirim.

Ancak, aynı hücrede, kullanıcı "Merhaba! :)" değerini gönderebilir, peki ya sonra?

E_Last_10_bars_2_Close_price("Привет! :)");
 
 

Oh, Peter, yanlış programlama diliyle başladın. Çalışmak için kesinlikle yazılmamış bir şeye ihtiyacınız vardı.

Genel olarak, sizi anlıyorum, MQL'ye dayalı kendi yazılmamış PL'nizi buldunuz. Ve dizeleri kullanarak katı yazımını atladınız. Bu bir manevra!

 
Vasiliy Sokolov :

Oh, Peter, yanlış programlama diliyle başladın. Çalışmak için kesinlikle yazılmamış bir şeye ihtiyacınız vardı.

Genel olarak, sizi anlıyorum, MQL'ye dayalı kendi yazılmamış PL'nizi buldunuz. Ve dizeleri kullanarak katı yazımını atladınız. Bu bir manevra!

Evet,)) Şövalye hamlesi!

 

Bir tablo kullanıyorsanız, içinde ne tür veriler görüntüleyeceğinize karar vermelisiniz: kesinlikle sayısal veya metinsel. Metin ise - satırları aktarırsınız. Gerçekse, işleviniz şöyle görünmelidir:

 string E_Last_10_bars_2_Close_price( double n ,   int Property = - 1 ){ return (GET_N_SET( 11 ,n,Property));}