"Getting Rid of Self-Made DLLs" makalesi için tartışma - sayfa 4

 
Maxim Kuznetsov #:

son parametre (cnt olan) de 64 bittir. Bu size_t

https://learn.microsoft.com/en-us/cpp/c-runtime-library/reference/memcpy-wmemcpy

Teşekkürler.

 
Maxim Kuznetsov #:

Tabii ki öyle... prototipler 4'ten (32 bit adres a la unsigned int) ve 5'te derler/çalıştırırsınız (64'e sahiptir).

Gerizekalı, daha önce ben de uzun yazdım.

#define  MEMCPY_MACROS(A)                                                     \
long memcpy( const long Destination, const A &Source[], const uint Length ); \
long memcpy( A &Destination[], const long Source, const uint Length );
 
Edgar Akhmadeev #:

64bit adresiyle ilgili noktayı kaçırmışım. Ama düzeltilmiş adresle hala çöküyorum. Çalışması gerektiğinden emin misiniz? Düzeltilmiş fxsaber kodunun tam bir örneğini görebilir miyim?

Şimdiye kadar hala kendi görüşümdeyim - WinAPI'den gelen adres MQL ile uyumsuz.

Bir hata buldum, neden düzeltilmiş sürüm benim için çalışmadı. Bir yerde yazım hatası yapmışım.

Fikrim değişti, hepinize teşekkür ederim.

 

Bu arada, MS memcpy işlevini güvensiz ve eski olarak değerlendirir ve bunun yerine memcpy_s işlevini önerir. Ayrıca, ilk parametre const değildir. Yani sonuç şudur:

#define  DEF_MEMCPY_S(T)                                                   \
        ulong memcpy_s(T &dst,   ulong size, const ulong src, ulong cnt); \
        ulong memcpy_s(T &dst[], ulong size, const ulong src, ulong cnt); \
        ulong memcpy_s(T &dst,   ulong size, const T &src[],  ulong cnt); \
        ulong memcpy_s(T &dst[], ulong size, const T &src[],  ulong cnt);
        
#import "msvcrt.dll"
        DEF_MEMCPY_S(char)
        DEF_MEMCPY_S(uchar)
        DEF_MEMCPY_S(int)
        DEF_MEMCPY_S(uint)
        DEF_MEMCPY_S(long)
        DEF_MEMCPY_S(ulong)
#import



void OnStart() {
        int Array[];
        ArrayResize(Array, 1);
        Array[0] = 123;
        int Value1 = 0;
        int Value2 = 0;
        
        ulong Address = memcpy(Array, 0, 0);
        memcpy_s(Value1, sizeof(int), Address, sizeof(int));
        
        memcpy_s(Value2, sizeof(int), Array,   sizeof(int));
        
        Print(Value1, " ", Value2);
}
 

İlginç örnekler. Bilenler için bir soru. Herhangi bir sınıftan bir vektörün, matrisin, nesnenin adresini almak mümkün mü?

 
Denis Kirichenko #:

İlginç örnekler. Bilenler için bir soru. Herhangi bir sınıftan bir vektörün, matrisin, nesnenin adresini almak mümkün mü?

Hayır