環境
OS :Win7 pro
アプリ:Delphi 10 Seattle
メモリマップドファイルを下記コードにて作成しているのですが
FHandle := CreateFileMapping($FFFFFFFF, nil, PAGE_READWRITE,0, 100, PChar(mapName));
ターゲットプラットフォームが 「32ビット Windows」の場合は正常に作成されているのですが、「64ビット Windows」に変えると 0が戻り、作成されていません。(32,64ともデバッグしながら確認)
64bitで作成する為はどこか設定を変えるのかコード自体を変更する必要があるのでしょうか?
ご存知の方がいれば教えてください。
ちなみに、Subscription Update 1 は適用されてますか?
CreateFileMapping(INVALID_HANDLE_VALUE,...
では?あとGetLastErrorは?
コメント頂き有難うございます。
>igyさん
Subscription Update 1 は適用しています。
>通りすがりさん
エラー時のGetLastErrorは「6」でSysErrorMessage(GetLastError)は「ハンドルが無効です」となりました。
また、INVALID_HANDLE_VALUEを指定すると作成されました。
ちなみにINVALID_HANDLE_VALUEの値は
32bitの場合「4294967295」、
64bitの場合「18446744073709551615」
でしたので、
FHandle := CreateFileMapping($FFFFFFFFFFFFFFFF,
と書けば同じく64bitで動きました。
INVALID_HANDLE_VALUEと書いておけば
仮にターゲットが変わった場合でもソースの修正がいらないのでこの
形式で記載します。
ソースの「CreateFileMapping」の箇所にカーソルをあてて表示されるポップアップの
第一引数の箇所が
32bitの時:system.Cardinal
64bitの時:system.Uint64
となっておりターゲットによって引数の型が変わるのですね。
当たり前なのかもしれませんが、初めて知りました。
以上、有難うございました。
ツイート | ![]() |