Hatalar, hatalar, sorular - sayfa 2580

 
Koldun Zloy :

1. MQL'de bir işaretçi değil, bir dize kopyalanır.

_DLLAPI void fnReplaceString( wchar_t * text, wchar_t * from , wchar_t * to)
{
   wchar_t * cp;
   
   //проверка параметров
   if (text==NULL || from ==NULL || to==NULL) return ;
   if (wcslen( from )!=wcslen(to))             return ;
 
   //поищем подстроку
   if ((cp=wcsstr(text, from ))==NULL)         return ;

   //заменим
   memcpy(cp,to,wcslen(to)* sizeof (wchar_t));
}
 #import "MQL5DLLSamples.dll"
void fnReplaceString( string & text, string from, string to);
#import


Bölüm 3.3

 
Koldun Zloy :

2. MQL'de 200 karakterlik bir dizi seçtiniz. Sonra içine 164 karakter kopyaladık. Bundan sonra, MQL'deki dizenin boyutuna bakın. 200'de kaldı.

Boy değil uzunluk! Karakter cinsinden uzunluk, bayt cinsinden boyut.
164 karakterlik bir dizi aldıktan sonra kontrol ettim, evet, uzunluk da 200 olarak kaldı.
Bu konudaki düşünceleriniz nelerdir?

 
Roman :

Bunun doğru olması için memcpy'yi terk ettim ve wcscpy veya wcsncpy kullandım.
Sonuç, yukarıya yazınız.

Sizeof( wchar_t* ) demek istedim.

 
Roman :


Bölüm 3.3

Benimle tartışmamanız, bu makaleyi daha dikkatli okumanız daha iyi olur. Ve neler olduğunu anlayın.

O zaman hiçbir sorun olmayacak.

Yapmak istediğin şey aslında o kadar da zor değil.

 
Roman :

Boy değil uzunluk! Karakter cinsinden uzunluk, bayt cinsinden boyut.
164 karakterlik bir dizi aldıktan sonra kontrol ettim, evet, uzunluk da 200 olarak kaldı.
Bu konudaki düşünceleriniz nelerdir?

Bunun neden olduğu yukarıda zaten açıklanmıştır.

 
Koldun Zloy :

Yapmak istediğin şey aslında o kadar da zor değil.

Peki, o kadar zor değilse söyle.
Yoksa bunun normal bir davranış olduğunu mu düşünüyorsunuz?

 

Yani, hiçbir şey anlamayı bile düşünmüyorsunuz, sadece size hazır bir tarif verin ve bu kadar mı?

Sana yükse neden programlama yapman gerektiğini anlamıyorum ama bu senin işin.


Bir soru sorarsanız ve ayrıntılı tekrarlanabilir kod göstermek istemezseniz, birisinin size yardım etmeye istekli olacağını düşünüyor musunuz?

sana ne yazıyorlar ya da okumuyorlar ya da daha fazlasını bilenlerle tartışıyorlar mı?


Bu nedenle, hazır bir tarif olmayacak. DLL'den string almanın genel prensibini yazacağım. Kendinizi bir programcı olarak görüyorsanız, kodu kendiniz yazın.


1. MQL'de bir ushort dizisi oluşturun.

2. Başlatın.

3. Diziyi ve boyutunu DLL'ye iletin.

4. DLL'de, wmemcpy_s() işlevini kullanarak dizeyi bu diziye kopyalayın.

5. DLL'den kopyalanan dizenin uzunluğunu döndürün.

6. MQL'de, ShortArrayToString() işlevini kullanarak bir diziden bir dize oluşturun.

 
Bu konuyla ilgili olmayan yorumlar " MQL4 MT4 MetaTrader 4 Yeni Başlayanlardan Sorular " bölümüne taşındı.
 

Sunuculardan birinde (MQ değil), MT5 çılgına döner - yüzdeyi %100 yükler ve çeşitli enstrümanlar için günlükte aşağıdaki mesajları yoğun bir şekilde görüntüler:

HistoryBase sabit kendiliğinden güncelleme

Grafikler titriyor. Çalışmak imkansız.

Bunu yerel olarak düzeltmek mümkün mü yoksa tek çıkış yolu sunucunun görünüşe göre bazı oyunları bitirmesini beklemek mi?

 
Koldun Zloy :

Yani, hiçbir şey anlamayı bile düşünmüyorsunuz, sadece size hazır bir tarif verin ve bu kadar mı?

Sana yükse neden programlama yapman gerektiğini anlamıyorum ama bu senin işin.

Bir soru sorarsanız ve ayrıntılı tekrarlanabilir kod göstermek istemezseniz, birisinin size yardım etmeye istekli olacağını düşünüyor musunuz?

sana ne yazıyorlar ya da okumuyorlar ya da daha fazlasını bilenlerle tartışıyorlar mı?

Bu nedenle, hazır bir tarif olmayacak. Bir DLL'den string almanın genel prensibini yazacağım. Kendinizi bir programcı olarak görüyorsanız, kodu kendiniz yazın.


1. MQL'de bir ushort dizisi oluşturun.

2. Başlatın.

3. Diziyi ve boyutunu DLL'ye iletin.

4. DLL'de, wmemcpy_s() işlevini kullanarak dizeyi bu diziye kopyalayın.

5. DLL'den kopyalanan dizenin uzunluğunu döndürün.

6. MQL'de, ShortArrayToString() işlevini kullanarak bir diziden bir dize oluşturun.

Buradaki tartışmayı nerede gördünüz? Çalışan bir tartışma var, kibirli pathos ile anlamı bir tavuk kümesine çevirmeye gerek yok.
Kimse sizden hazır bir şey istemedi. İşaretçi ile çözümü bildiğinizi sanıyordum ama hayır, yanılmışım.
Konuyu okumuyorsunuz, diziler hakkında uzun süredir bir tartışma var ve herkes bunun çok iyi farkında.
Ve uzun zamandır dizilere doğru eğiliyorum. Ancak mql'de bir dize olduğu için neden doğrudan kullanmıyorsunuz.
Bu sadece mql dizesindeki bir hata için, içine bir işaretçi kopyalamak, burada bahsediyoruz.
Size daha fazlasını söyleyeceğim, sadece ushort her şeyi çözemez. Diziler için birçok seçenek var.
Ama benim durumumda dizi kullanmak istemiyorum, kod yapısı açısından her zaman mantıklı değil.
Ve dahası, doğrudan çalışabileceğiniz, ancak doğru çalışması gereken bir mql dizesi olduğunda.