MQL5'te her zaman kahramanlığa yer vardır! ;) - sayfa 2

 
sergeev :

Ve böylece bir numaralı soru var.

Bir 64 uygulama, user32.dll vb. gibi 32-bit dll'lerden nasıl içe aktarılır? Yoksa sistemde bu isimle kopyaları var mı ve OOP alanı mı oluşuyor?

Yeni başlayanlar için, x64 sistemlerinde x86 programlarının öykünülmüş bir lansmanı vardır. Soru, x64 programlarının x86'da nasıl çalıştırılacağıdır?
 
Urain :
Yeni başlayanlar için, x64 sistemlerinde x86 programlarının öykünülmüş bir lansmanı vardır. Soru, x64 programlarının x86'da nasıl çalıştırılacağıdır?

Belki de soru terminalde değil, aynı DLL'lerin bir tür zor derlemesinde mi?

Tüm çalışmalardan sonra, vida API'sinden DLL. Örneğin, bir 32/64 bit terminalde user32, kernel32 , winmm, wininet.

Sorunun çözümü başka bir düzlemde bir yerde görülebilir.

 
Urain :
Soru, x64 programlarının x86'da nasıl çalıştırılacağıdır?
Kesinlikle işe yaramayacak. x86 işlemci 64-bit yönergeleri yürütemez.
sergeev :

Belki de soru terminalde değil, aynı DLL'lerin bir tür zor derlemesinde mi?

Tüm çalışmalardan sonra, vida API'sinden DLL. Örneğin, 32/64 bit terminalde user32, kernel32, winmm, wininet.

Sorunun çözümü başka bir düzlemde bir yerde görülebilir.

Burada bir şey var. Onlar. teorik olarak, 32-bit DLL'lerin burada ve orada çalışmasını sağlayabilirsiniz.

Belki de geliştiricileri aramanın zamanı gelmiştir.

// "Saf" bir şekilde derlenen 32 bit DLL, x64'ümde çalışmayı durdurdu. Ama belki de derlemenin daha zor yolları vardır. Her durumda, "vardır" (c) - emsalleri vardır -

Tüm çalışmalardan sonra, vida API'sinden DLL. Örneğin, 32/64 bit terminalde user32, kernel32, winmm, wininet.

 
MetaDriver :

Peki, bu benzetmeye göre yapın ... iş bir şey! ... :-))

Ve bir bakacağım. ;)

 //+------------------------------------------------------------------+
class Cdouble
{
public :
         double                   v;
         void     operator=       ( double d) {v=d;}
};
//+------------------------------------------------------------------+
class C1Xdouble
{
        Cdouble                 v[];
public :
        
                                C1Xdouble() {}
                                C1Xdouble( int s) { ArrayResize (v,s);}
                               ~C1Xdouble(){ ArrayFree (v);}
         double operator[]       ( int x) { return (v[x].v);}
        Cdouble *operator[]    ( long x){ return ( GetPointer (v[( int )x]));}
         int                      Resize( int s){ return ( ArrayResize (v,s));}
};
//+------------------------------------------------------------------+
class C2Xdouble
{
        C1Xdouble               v[];
public :
                                C2Xdouble() {}
                                C2Xdouble( int s1, int s2);
                               ~C2Xdouble(){ ArrayFree (v);}
        C1Xdouble *operator[]   ( int x) { return ( GetPointer (v[x]));}
};
C2Xdouble::C2Xdouble( int s1, int s2)
{
         ArrayResize (v,s1);
         for ( int i= 0 ; i<s1; i++) v[i].Resize(s2);
}
//+------------------------------------------------------------------+
Davanız için en basit seçenek.
 
Yurich :
Davanız için en basit seçenek.

Eh, en basit durum için - ofset. "Seni kaydediyorum" (c) :)

Hafızadan, çok ekonomik olmasa da, karşılaştırma için

    C2Xdouble  X( 1000 , 1000 );
     Print ( "X(100,100).SizeOF() = " ,X.SizeOf()); 
// добавил в ваши классы вычисление размера
-----
    C2DMagicArray  MA( 1000 , 1000 );
     Print ( "MA(100,100).SizeOF() = " , sizeof (MA)+MA.SizeOf()); 
// это мой. у меня MA.SizeOf() возвращает только размер чистого буфера, поэтому по честному добавил размер класса. :)

sonuç:

 2012.05 . 23 12 : 59 : 05      CXDouble (AUDNZD,M1)    MA( 100 , 100 ).SizeOF() = 4000112
2012.05 . 23 12 : 59 : 05      CXDouble (AUDNZD,M1)    X( 100 , 100 ).SizeOF() = 24068068

Fark 6 kat. Bir kayan nokta arabelleğim olduğu göz önüne alındığında - üç. // ve ayrıca örtük bir bellek soygununuz da var - sistem sınıfı tanımlayıcı tablosu (bu örnekte) 1000*1000+1000'dir ve bende 1 (!)

Çalışma hızı neredeyse aynı.

küçülecek misin? ;)

--

not Muhtemelen yalan söyledi. Alt sınıflarınızın tümü statiktir, bu nedenle örtülü soygun biraz abartılı. atlıyorum. :)

 
MetaDriver :

Belki de geliştiricileri aramanın zamanı gelmiştir.
Kısaca.
x86 (32 bit) işlemleri için sistem kitaplığı işlevleri, bunların x64'e geçirildiği, yürütüldüğü ve x86'ya geri döndürüldüğü özel bir sarmalayıcıya sahiptir.
 
mql5 :
Kısaca.
x86 (32 bit) işlemleri için sistem kitaplığı işlevleri, bunların x64'e geçirildiği, yürütüldüğü ve x86'ya geri döndürüldüğü özel bir sarmalayıcıya sahiptir.

Bilgi için teşekkürler.

Ve aynısını kendin nasıl yapacağımı söyler misin? Sadece bağlayabilirsiniz (varsa).

 
MetaDriver :


küçülecek misin? ;)

Hayır, mümkün olduğunda tek boyutlu diziler kullanırım.
 
Peki, #ifdef soruna normal bir çözüm değil mi?
 
Yurich :
Hayır, mümkün olduğunda tek boyutlu diziler kullanırım.

TAMAM. Bu durumda optimizasyon sorunları ikincildir. Feat her şekilde korunur.

--

Aşağıdaki sorunu önerebilirim.

Bir dizi keyfi boyut (kesinlik için, diyelim ki ^16 ile sınırlayacağız).

Boyut, sıradan dizilerde olduğu gibi, oluşturma sırasında parametre sayısına göre ayarlanır.

XXArray  xx2(5,7),  xx5(12,12,16,16,8);

Dizin oluşturucular tüm boyutlar için çalışmalıdır ( A[i][j][k][n][m]....)

Tamamen spor ve beyin jimnastiği için. :)