喫茶XRAYトップページ

[スレッド全体
]

[11611] Re7:リソースのビットマップ取得返信 削除
2017/11/28 (火) 09:38:59 Mr.XRAY
▼ おかぽんさん
>
> > 近い環境ということで、Delphi6で試してみたのですが、以下のほぼ丸コピー
> > 動いています。
> > なぜだろう?
>
> が〜ん・・・
> Asuyu さんゴメンナサイ.名誉棄損で訴えないでね.
> Asuyu の場合,EnumResourceNames のコールバック関数内で
> 目的の ID のビットマップを検出しているからですね.
> 元々 EnumResourceNames のコールバック内で列挙しているわけですから,
> 可能なわけです.
> 大変失礼しました.


あっ,これまた失礼しましたる
おかぽんさんのコードはEnumReourceNames のコールバック内ではないてずね.
Delphi 6 で動作確認しました.
hell32.dll はビットマップの取得はできませんでした.
また,Delphi XE では列挙はできますが,
TListBox の Item を選択すると何故か例外発生.
ただし,Delphi XE の IDE から実行する場合に dclstd60.bpl を対象にすると
正常に動作します.
う〜む何故だ.


[11612] Re8:リソースのビットマップ取得返信 削除
2017/11/28 (火) 09:51:11 Mr.XRAY
> う〜む何故だ.

はい分かりました.

Delphi XE では LoadLibrary ではなく LoadLibraryEx を使用すると
正常に動作します.

LoadLibraryEx のフラグに LOAD_LIBRARY_AS_DATAFILE を指定します.
フラグの値を 0 にすると LoadLibrary と同じになります.


[11613] Re9:リソースのビットマップ取得返信 削除
2017/11/28 (火) 10:39:18 Mr.XRAY
> LoadLibraryEx のフラグに LOAD_LIBRARY_AS_DATAFILE を指定します.
> フラグの値を 0 にすると LoadLibrary と同じになります.


ついでに説明しておきますと,
BPL ファイルというのは DLL と同じです.
しかし,Delphi 専用でしかも Delphi のバージョン依存です.

バージョン依存ですから Delphi 6 で作成した EXE では LoadLibrary で
Delphi 6 用の BPL は読み込めますが,Delphi XE の BPL は読み込めないわけです.
LoadLibraryEx で DATAFILE を指定して読み込めば読み込めることになります

参考記事
[005_フォームを実装した実行時パッケージの作成]
http://mrxray.on.coocan.jp/Delphi/plSamples/005_FormInPackage.htm


[11614] Re9:リソースのビットマップ取得返信 削除
2017/11/28 (火) 12:45:08 おかぽん
▼ Mr.XRAYさん
いつもながら仕事が早い。

> LoadLibraryEx のフラグに LOAD_LIBRARY_AS_DATAFILE を指定します.
> フラグの値を 0 にすると LoadLibrary と同じになります.

しかし、そんなところによく気がつきます。
まず、LoadLibraryExなんて、使おうとも思いません。
BPLなんて、単に拡張子が違うだけのDLLって認識なので、関数の呼び出しは
ともかく、リソースの一つや二つ、Loadできれば一緒だろと(^^;)



[11616] Re10:リソースのビットマップ取得返信 削除
2017/11/28 (火) 13:46:17 Mr.XRAY
▼ おかぽんさん

> しかし、そんなところによく気がつきます。

いや,その,これはですね.MSDN の記事そのままです.
掲載しているサンプルコードもそうですが,
ネットで検索すると,同じようなのがいくつかあります.
おそらく,誰かが最初にやったのをまた誰かがというのがありますよね.

最近,えっと... あっそうそう,インストールされている .NET Framework
なんかも,ネットうえにサンプルコードが結構ありました.
私は MSDN 説明記事にしたがってコーディングしました.


[▼次のスレッド]
INCM/CMT
Cyclamen v3.82