기고글 토론 "DLL 생성이 불필요한 이유" - 페이지 4

 
Maxim Kuznetsov #:

마지막 매개변수(cnt)도 64비트입니다. size_t입니다.

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

고마워요.

 
Maxim Kuznetsov #:

물론 그렇습니다... 프로토타입은 4(32비트 주소는 부호 없는 인트라)에서, 컴파일/실행은 5(64)에서 합니다.

지체, 나는 더 일찍 롱을 통해 썼다.

#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 #:

64비트 주소로 요점을 놓쳤습니다. 하지만 수정된 주소에서도 여전히 충돌이 발생합니다. 제대로 작동하는 게 맞나요? 수정된 fxsaber 코드의 전체 예제를 볼 수 있나요?

아직까지는 제 개인적인 생각으로는 WinAPI의 주소가 MQL과 호환되지 않는 것 같습니다.

수정된 버전이 왜 작동하지 않는지 실수를 발견했습니다. 나는 오타를 만들었고, 한 곳에서 놓쳤습니다.

내 의견이 바뀌 었습니다, 모두 감사합니다.

 

그런데 MS는 memcpy 함수가 안전하지 않고 더 이상 사용되지 않는 것으로 간주하고 대신 memcpy_s를 제안합니다. 게다가 첫 번째 매개변수는 const가 아닙니다. 그래서 결과는 다음과 같습니다:

#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);
}
 

흥미로운 예시입니다. 전문가를 위한 질문입니다. 벡터, 행렬, 모든 클래스의 객체의 주소를 가져올 수 있나요?

 
Denis Kirichenko #:

흥미로운 예시. 전문가를 위한 질문입니다. 벡터, 행렬, 모든 클래스의 객체의 주소를 가져올 수 있나요?

아니요