記事"自作 DLL の排除"についてのディスカッション - ページ 4

 
Maxim Kuznetsov #:

最後のパラメータ(cnt)も64ビットである。これはsize_t

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

ありがとう。

 
Maxim Kuznetsov #:

もちろんそうだ...プロトタイプは4(符号なしintのような32ビットアドレス)からで、コンパイル/実行は5(64ビット)だ。

遅いよ、僕はさっき longs経由で書いたんだ。

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

興味深い例通の方に質問です。任意のクラスのベクトル、行列、オブジェクトのアドレスを取得することは可能ですか?

いいえ