配列の参照 - ページ 3

 

なんということでしょう、この構造物の大きさは......。

struct ArrayStore
{
   long reserved;
   double x[];
};

60バイト ) でも、それはおかしいよ。52バイトのスクランブルを解除することになる。

もし興味があれば、以下は掘るための初期コードです。

#import "msvcrt.dll"
  long memcpy(long &dst, long &src, int cnt);
  long memcpy(uchar &dst[], long &src, int cnt);
#import

struct ArrayStore
{
   long reserved;
   double x[];
};

#define N 60
// sizeof(ArrayStore) == 60

void OnStart()
{
   ArrayStore store;
   ArrayResize(store.x, 0x11, 0x22);
   store.reserved = 0xFF;
   
   uchar array[N];
   ArrayInitialize(array, 0);
   
   memcpy(array, store.reserved, N);
   
   string s;
   for (int i = 0; i < N; i++)
   {
      s = s + " " + StringFormat("%.2X", array[i]);
   }
   Print(s);
}
 
ArrayStore::double x[];
このパラメーターの意味がわからない...。
 
sergeev:
このパラメーターの意味がよくわからないのですが...。

配列の 最初の要素のアドレスを取得するのはどうでしょう。

long ArrPtr = memcpy(Arr[0], Arr[0], 1);


が効かない?

 
MetaDriver:

配列の 最初の要素のアドレスを取得するのはどうでしょう。

long ArrPtr = memcpy(Arr[0], Arr[0], 1);


が効かない?

はもちろんのこと

しかし、なぜなのかがわからない

ArrayStore::double x[];
 
sergeev:

もちろん、効果はあります。

でも、なぜなのか、まだわからない

それもわからない。:)
 
MetaDriver:
私もよくわかりません。:)

さあ

もう一度、課題を繰り返してみます。時系列の大きさに対して時間O(1)で、それを参照する。つまり、配列のコピーはアプリオリに禁止されているのです。

唯一の方法は、配列構造をフェッチすることです。そこで、配列ポインタの代わりに時系列ポインタを強制的に指定し、いくつかのパラメータを付けて、構造体に大丈夫と思わせる。

配列構造のサイズは 52バイトで、そのうち8バイトは(おそらく)実際にポインタであり、残りはサイズ、リザーブ、AsSeriesプロパティなどの設定である。(Win7x64)

あとは、その構造を解きほぐし、適切なデータを滑らせる方法を身につけることです。

Документация по MQL5: Основы языка / Операции и выражения / Другие операции
Документация по MQL5: Основы языка / Операции и выражения / Другие операции
  • www.mql5.com
Основы языка / Операции и выражения / Другие операции - Документация по MQL5
 
sergeev:

はもちろん、作品です。

もちろん動作しますが、この方法ではデータへのポインタを 取得するため、ポインタを置き換えることはできず、データのみを置き換えることになります、したがって.もっと踏み込まないと
 

それとも、何が必要なのか理解できていないのか。

最初の投稿で、問題を設定しましたね。

このような、ある種の配列の参照。

memcpyが正常に配列へのポインタを 取得することを示しました。

その後、同じようにmemcpyを使って、データを取得します。


では、本当に必要なものは何でしょうか? なぜここで何らかの構造体を作るのでしょうか? 配列へのポインタとどんな関係があるのでしょうか?

 
sergeev:

そしてmemcpyを使ってデータを取り出します。

ゆっくりとすべてのDLL関数は、ラッパーを介して呼び出されます。

コピーしない通常の配列が必要です。

最初の投稿をご覧ください。私が欲しいものを的確に言い当てた、非常に正確なコードを持っているのです。

 
TheXpert:

ゆっくりとすべてのDLL関数は、ラッパーを介して呼び出されます。

コピーしない通常の配列が必要です。

最初の投稿をご覧ください。私が欲しいものを正確に伝える、非常に正確なコードがあるのです。

単純なことです:)カルテットで本格的な時系列配列を作れば(あなたのは9番目です)、黄金の鍵はあなたのポケットの中です:)

平手打ちされるよ、イミフ。聖なる牛をハックすることはできない。