ライブラリ: DLLなしでのファイルマッピング - ページ 12

 
ありがとう。
 

膨大な量(ギガバイト)のデータを転送する必要があった。このライブラリを使った実装は、残念ながら超低性能だった。

元のDLLセットを使って 完全にやり直す必要があった。すぐに 動作した。

 
このトリックが誰かのために全く機能しなかったのは驚きだ。以下はCMemMapApi::Write()の一部である。ArrayResize(src, size); memcpyX(src, view, size); // バイトバッファを取得 for(int i=0; i
 

残念ながら、FileMappingには重大な欠点がある。子アプリケーション(データの読み取り)が何らかの理由で正しく作業を終了しなかった場合 kernel32 ::UnmapViewOfFile コールと kernel32::CloseHandle コール、「ファイル」は、それがオープンされたすべてのプロセスがクローズされるまで(kernel32::OpenFileMappingW コールとkernel32::MapViewOfFile コール)、メモリにぶら下がったままになります。特に、サイズを変更したり、開き直したりすることはできません(閉じて開き直す)。


この問題の解決策は見つかって いません。このライブラリでは、すべてのアクションがオープンで始まりクローズで終わるので、このような状況に遭遇するのは難しい。そのため、動作がとても遅い のです。しかし、それでもこのエラーに遭遇するかもしれない。そしてMQLプログラムはこのメッセージとともにクラッシュする。

Access violation at 0x00007FF988234593 write to 0x0000021D17D87000 in 'msvcrt.dll'
              00007 FF9882343C0 488 BC1            mov        rax, rcx
              00007 FF9882343C3 4983 F808          cmp        r8, 0x08
              00007 FF9882343C7 7237              jb         0x00007FF988234400

              00007 FF9882343C9 4983 F810          cmp        r8, 0x10
              00007 FF9882343CD 7711              jnbe       0x00007FF9882343E0

              00007 FF9882343CF 4 C8B1A            mov        r11, [rdx]
              00007 FF9882343D2 4 A8B5402F8        mov        rdx, [rdx+r8*1-0x08]
              00007 FF9882343D7 4 C8919            mov        [rcx], r11
              00007 FF9882343DA 4 A895401F8        mov        [rcx+r8*1-0x08], rdx
              00007 FF9882343DF C3                ret       

              00007 FF9882343E0 4983 F820          cmp        r8, 0x20
              00007 FF9882343E4 775 A              jnbe       0x00007FF988234440

              00007 FF9882343E6 0 F1002            movups     xmm0, [rdx]
              00007 FF9882343E9 420 F104C02F0      movups     xmm1, [rdx+r8*1-0x10]
              00007 FF9882343EF 0 F1101            movups     [rcx], xmm0
              00007 FF9882343F2 420 F114C01F0      movups     [rcx+r8*1-0x10], xmm1
              00007 FF9882343F8 C3                ret       

              00007 FF9882343F9 0 F1F8000000000    nop        [rax], eax
              00007 FF988234400 4 D85C0            test       r8, r8
              00007 FF988234403 7415              jz         0x00007FF98823441A

              00007 FF988234405 482 BD1            sub        rdx, rcx
              00007 FF988234408 7216              jb         0x00007FF988234420

              00007 FF98823440A 448 A1C11          mov        r11b, [rcx+rdx*1]
              00007 FF98823440E 48 FFC1            inc        rcx
              00007 FF988234411 49 FFC8            dec        r8
              00007 FF988234414 448859 FF          mov        [rcx-0x01], r11b
              00007 FF988234418 75 F0              jnz        0x00007FF98823440A

              00007 FF98823441A C3                ret       

              00007 FF98823441B 0 F1F440000        nop        [rax+rax*1], eax
              00007 FF988234420 4903 C8            add        rcx, r8
              00007 FF988234423 448 A5C11FF        mov        r11b, [rcx+rdx*1-0x01]
              00007 FF988234428 48 FFC9            dec        rcx
              00007 FF98823442B 49 FFC8            dec        r8
              00007 FF98823442E 448819            mov        [rcx], r11b
              00007 FF988234431 75 F0              jnz        0x00007FF988234423

              00007 FF988234433 C3                ret       

              00007 FF988234434 666666660 F1F8400  nop        [rax+rax*1], ax
                               00000000
              00007 FF988234440 4 E8D1C02          lea        r11, [rdx+r8*1]
              00007 FF988234444 482 BD1            sub        rdx, rcx
              00007 FF988234447 7309              jnb        0x00007FF988234452

              00007 FF988234449 4 C3BD9            cmp        r11, rcx
              00007 FF98823444C 0 F876E010000      jnbe       0x00007FF9882345C0

              00007 FF988234452 0 F100411          movups     xmm0, [rcx+rdx*1]
              00007 FF988234456 4883 C110          add        rcx, 0x10
              00007 FF98823445A F6C10F            test       cl, 0x0F
              00007 FF98823445D 7412              jz         0x00007FF988234471

              00007 FF98823445F 4883 E1F0          and        rcx, 0xFFFFFFFFFFFFFFF0
              00007 FF988234463 0 F100C11          movups     xmm1, [rcx+rdx*1]
              00007 FF988234467 0 F1100            movups     [rax], xmm0
              00007 FF98823446A 0 F28C1            movaps     xmm0, xmm1
              00007 FF98823446D 4883 C110          add        rcx, 0x10
              00007 FF988234471 4 C03C0            add        r8, rax
              00007 FF988234474 4 C2BC1            sub        r8, rcx
              00007 FF988234477 4 D8BC8            mov        r9, r8
              00007 FF98823447A 49 C1E906          shr        r9, 0x06
              00007 FF98823447E 746 F              jz         0x00007FF9882344EF

              00007 FF988234480 4981 F900100000    cmp        r9, 0x1000
              00007 FF988234487 0 F87B3000000      jnbe       0x00007FF988234540

              00007 FF98823448D 4983 E03F          and        r8, 0x3F
              00007 FF988234491 EB2D              jmp        0x00007FF9882344C0

              00007 FF988234493 666666666666660 F  nop        [rax+rax*1], ax
                               1 F840000000000
              00007 FF9882344A2 666666666666660 F  nop        [rax+rax*1], ax
                               1 F840000000000
              00007 FF9882344B1 666666666666660 F  nop        [rax+rax*1], ax
                               1 F840000000000
              00007 FF9882344C0 0 F100C11          movups     xmm1, [rcx+rdx*1]
              00007 FF9882344C4 0 F10541110        movups     xmm2, [rcx+rdx*1+0x10]
              00007 FF9882344C9 0 F105C1120        movups     xmm3, [rcx+rdx*1+0x20]
              00007 FF9882344CE 0 F10641130        movups     xmm4, [rcx+rdx*1+0x30]
              00007 FF9882344D3 0 F2941F0          movaps     [rcx-0x10], xmm0
              00007 FF9882344D7 4883 C140          add        rcx, 0x40
              00007 FF9882344DB 49 FFC9            dec        r9
              00007 FF9882344DE 0 F2949C0          movaps     [rcx-0x40], xmm1
              00007 FF9882344E2 0 F2951D0          movaps     [rcx-0x30], xmm2
              00007 FF9882344E6 0 F2959E0          movaps     [rcx-0x20], xmm3
              00007 FF9882344EA 0 F28C4            movaps     xmm0, xmm4
              00007 FF9882344ED 75 D1              jnz        0x00007FF9882344C0

              00007 FF9882344EF 4 D8BC8            mov        r9, r8
              00007 FF9882344F2 49 C1E904          shr        r9, 0x04
              00007 FF9882344F6 7419              jz         0x00007FF988234511

              00007 FF9882344F8 0 F1F840000000000  nop        [rax+rax*1], eax
              00007 FF988234500 0 F2941F0          movaps     [rcx-0x10], xmm0
              00007 FF988234504 0 F100411          movups     xmm0, [rcx+rdx*1]
              00007 FF988234508 4883 C110          add        rcx, 0x10
              00007 FF98823450C 49 FFC9            dec        r9
              00007 FF98823450F 75 EF              jnz        0x00007FF988234500

              00007 FF988234511 4983 E00F          and        r8, 0x0F
              00007 FF988234515 740 E              jz         0x00007FF988234525

              00007 FF988234517 4 E8D5C01F0        lea        r11, [rcx+r8*1-0x10]
              00007 FF98823451C 410 F100C13        movups     xmm1, [r11+rdx*1]
              00007 FF988234521 410 F110B          movups     [r11], xmm1
              00007 FF988234525 0 F2941F0          movaps     [rcx-0x10], xmm0
              00007 FF988234529 C3                ret       

              00007 FF98823452A 666666666666660 F  nop        [rax+rax*1], ax
                               1 F840000000000
              00007 FF988234539 0 F1F8000000000    nop        [rax], eax
              00007 FF988234540 4 D8BC8            mov        r9, r8
              00007 FF988234543 49 C1E906          shr        r9, 0x06
              00007 FF988234547 4983 E03F          and        r8, 0x3F
              00007 FF98823454B 0 F18441140        prefetchnta [rcx+rdx*1+0x40]
              00007 FF988234550 EB2E              jmp        0x00007FF988234580

              00007 FF988234552 666666666666660 F  nop        [rax+rax*1], ax
                               1 F840000000000
              00007 FF988234561 666666666666660 F  nop        [rax+rax*1], ax
                               1 F840000000000
              00007 FF988234570 666666666666660 F  nop        [rax+rax*1], ax
                               1 F840000000000
              00007 FF98823457F 90                nop       
              00007 FF988234580 0 F100C11          movups     xmm1, [rcx+rdx*1]
              00007 FF988234584 0 F10541110        movups     xmm2, [rcx+rdx*1+0x10]
              00007 FF988234589 0 F105C1120        movups     xmm3, [rcx+rdx*1+0x20]
              00007 FF98823458E 0 F10641130        movups     xmm4, [rcx+rdx*1+0x30]
   crash -->  00007 FF988234593 0 F2B41F0          movntps    [rcx-0x10], xmm0
              00007 FF988234597 4883 C140          add        rcx, 0x40
              00007 FF98823459B 0 F18441140        prefetchnta [rcx+rdx*1+0x40]
              00007 FF9882345A0 49 FFC9            dec        r9
              00007 FF9882345A3 0 F2B49C0          movntps    [rcx-0x40], xmm1
              00007 FF9882345A7 0 F2B51D0          movntps    [rcx-0x30], xmm2
              00007 FF9882345AB 0 F2B59E0          movntps    [rcx-0x20], xmm3
              00007 FF9882345AF 0 F28C4            movaps     xmm0, xmm4
              00007 FF9882345B2 75 CC              jnz        0x00007FF988234580

              00007 FF9882345B4 0 FAEF8            sfence    
              00007 FF9882345B7 E933FFFFFF        jmp        0x00007FF9882344EF

              00007 FF9882345BC 0 F1F4000          nop        [rax], eax
              00007 FF9882345C0 4903 C8            add        rcx, r8
              00007 FF9882345C3 0 F104411F0        movups     xmm0, [rcx+rdx*1-0x10]
              00007 FF9882345C8 4883E910          sub        rcx, 0x10
              00007 FF9882345CC 4983E810          sub        r8, 0x10
              00007 FF9882345D0 F6C10F            test       cl, 0x0F

00: 0x00007FF988234593
01: 0x0000021D169A7C8D
02: 0x4FCA53C5B68EDABA
03: 0xFABD8EF98F632349
Особенности языка mql5, тонкости и приёмы работы - Попробуйте использовать макрос второго уровня.
Особенности языка mql5, тонкости и приёмы работы - Попробуйте использовать макрос второго уровня.
  • 2025.11.04
  • www.mql5.com
поэтому он должен оценить x и ввести значение в ST2 для структуризации. с технической точки зрения При использовании одноуровневой индирекции ST2 x строчит имя введенного макроса но при использовании двойного слоя он строчит значение введенного макроса
 
この例の 動作を確認しようとしています https://www.mql5.com/ja/code/818
MT5 Version: 5.00 build 5370 17 Oct 2025 を使用しています。

memmap.mq5ファイルをコンパイルしようとすると、なぜかエラーが出ます:

memmap.mq5                      
MemMapLib.mqh                   
wrong parameters count, 4 passed, but 3 requires        MemMapLib.mqh   279     9
   long CMemMapFile::Open(string,int,int)       MemMapLib.mqh   251     19
call resolves to 'long CMemMapFile::Open(string,int,int)' instead of 'long CMemMapApi::Open(string,int,int,int&)' due to new rules of method hiding     MemMapLib.mqh   279     9
   see declaration of function 'CMemMapFile::Open'      MemMapLib.mqh   251     19
   see declaration of function 'CMemMapApi::Open'       MemMapLib.mqh   122     19
wrong parameters count, 3 passed, but 1 requires        MemMapLib.mqh   292     9
   int CMemMapFile::Fill(uchar) MemMapLib.mqh   253     14
call resolves to 'int CMemMapFile::Fill(uchar)' instead of 'int CMemMapApi::Fill(long,uchar,int&)' due to new rules of method hiding    MemMapLib.mqh   292     9
   see declaration of function 'CMemMapFile::Fill'      MemMapLib.mqh   253     14
   see declaration of function 'CMemMapApi::Fill'       MemMapLib.mqh   124     14
wrong parameters count, 4 passed, but 1 requires        MemMapLib.mqh   299     16
   int CMemMapFile::Grows(int)  MemMapLib.mqh   255     14
call resolves to 'int CMemMapFile::Grows(int)' instead of 'long CMemMapApi::Grows(long,string,int,int&)' due to new rules of method hiding      MemMapLib.mqh   299     16
   see declaration of function 'CMemMapFile::Grows'     MemMapLib.mqh   255     14
   see declaration of function 'CMemMapApi::Grows'      MemMapLib.mqh   125     19
3 errors, 3 warnings            3       3

何が間違っているのか、どなたか教えてください。また、それを修正する方法を教えてください。

 
Иван #:
何が間違っているのか、どなたか教えてください。そして、それを修正する方法を教えてください。
ライブラリのソースがMQL5言語の現在の要件を満たしていません。
 
fxsaber #:
ライブラリのソースがMQL5言語の現在の要件を満たしていません。

修正する方法はありますか?それとも、すべてのソースを作り直す必要があり、作者なしでは不可能なのでしょうか?コンパイラが生成したエラーは3つだけだと思います。修正できれば最高です。

 
Иван #:

修正する方法はありますか?それとも、すべてのソースを作り直す必要があり、作者なしでは不可能なのでしょうか?コンパイラーはここで3つしかエラーを出さなかったと思います。修正されれば最高です。

そして、ここでは私自身がすでにコードを修正しました。必要な方は使ってください。Expert Advisorはこれで正常にコンパイルできるようになった。

251行目から追加しました:

   using CMemMapApi::Open;
   using CMemMapApi::Close;
   using CMemMapApi::Fill;
   using CMemMapApi::Grows;
   using CMemMapApi::Write;
   using CMemMapApi::Read;
ファイル:
MemMapLib.mqh  31 kb