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

 
o_O:

libはセクションにバインドしない。理論的には、コードは異なるプロセスで実行できるからだ。

それを制御するには、例えば、あなたのバリアントかhttps://www.mql5.com/ja/code/1835 を使ってください。

ミューテックスに名前がついていれば、メタトレーダーだけでなく、どのプロセスからでもそのハンドルを取得できるということでよろしいでしょうか?
 
Al_key:
ミューテックスに名前がついていれば、メタトレーダーだけでなく、どのプロセスからでもそのハンドルを取得できるという理解で合っていましたか?
https://msdn.microsoft.com/ru-ru/library/windows/desktop/ms686931%28v=vs.85%29.aspx 自分で答えを見つけました。確かに、プロセス間で共有できます。
 

作者に質問です。

mt4でこのクラスを使っています。ターミナルをオフにしてオンにすると、すべてが機能しなくなります。この問題を回避する方法はありますか?この問題を回避する方法はないでしょうか。

そして2つ目。Delphiで書かれたプログラムで作成されたファイルマッピングが読めません。どういうニュアンスなのでしょうか。

簡単に言うと、これらは多くの端末で動作する取引パネルです。

 
Dmitry Luck'janenko:


電源を切って端末の電源を入れると、すべてが動かなくなる。この問題を回避する方法はありますか?この問題を回避する方法はありますか?

このような初期化解除中にファイルがどうなっているか、ログをとって確認する必要があります。

ファイルのマッピングが読めません。

winapiのどの関数が "read "を意味するのでしょうか?

 
o_O:

このような初期化解除中にファイルに何が起こったか、ログをとって確認する必要がある。

winapiのどの関数が "read "なのか?

その関数は

HANDLE64 CMemMapFile::Open(LPTSTR path, DWORD size, int mode=modeOpen)

は常に0を返します。


そのため、ファイルが開いているのかどうかがよくわからない。

上の画像はExpert Advisorがまだ作成されていないファイル・マッピングを開いているログです。エラーはありません。

多分、関数

CMemMapFile::Open

しかし、返されるハンドルは常に0であるため、ティックごとに常にファイルを開くことを避けるためのチェックを行う可能性はありません。

そして2つ目の質問です。

Delphiでファイルマッピングを作成するアプリケーションを作成しました。接続するとエラーが発生します。すなわち、数字が正しく渡されません。私は{$Align Off}で整列を始めました。

他にも、「msvcrt.dll」の0x04E91000にアクセス違反が読み込まれるなどのエラーが出ました。

これでデータは正常に 19 バイト整列されました - "00:35:50.260 Panel v 1.00 GBPUSD.m,M5: OnInitsizeof(PipeData)= 19"。


しかし、読み込み時にはすべてのデータがゼロになります。

 
Dmitry Luck'janenko:

この関数は

は常に0を返すということだ。

そのため、ファイルが開いているのかどうかがよくわからない。

その通り、CMemMapFile::Openはエラーコードを 返すか、エラーがない場合は0を返します。

(CMemMapApi:とは異なり、CMemMapFile::Openはオープンハンドルを返し、渡されたパラメータにエラーを書き込みます)。

そして、ハンドルはm_hmemにある。



delphiで、ファイルマッピングを作成するアプリケーションを作成する。それを接続するとエラーが発生する。すなわち、数字が正しく渡されない。

ファイル先頭の予約DWORDバイトを考慮していますか?
 
o_O:


ファイル先頭の予約DWORDバイトを考慮していますか?
4バイトですか、試してみます。
 
Dmitry Luck'janenko:
4バイト? 試してみます、数えてませんでした。

ソースのファイルの書き方や作り方を見てください。

m_sizeパラメータについて

 
o_O:

が正しい場合、CMemMapFile::Openはエラーコードを 返し、エラーがない場合は0を返します。

(CMemMapApi:とは異なり、CMemMapFile::Openはオープンハンドルを返し、渡されたパラメータにエラーを書き込みます)。

ハンドルはm_hmemにあります。


ファイル先頭の予約DWORDバイトを考慮していますか?
2016.03.04 19:00:00.897 BuyNow Client v 1.03 USDCHF.m,M5: BuyNow Client v 1.03.mq4, handle=8589934592


存在しないファイル マッピングを開くと、m_hmem です。これがエラーかハンドルかを判断する方法を教えてください。

 
Dmitry Luck'janenko:

存在しないファイル・マッピングを開くとm_hmemになる。エラーなのかハンドルなのか、どう判断すればいいのでしょうか?

CMemMapFile::Openはエラーコードを 返すか、エラーがない場合は0を返すと書きました。