なんだか、めちゃくちゃなレスをつける人がいるんだな。本質を理解してないのが
見え見えですね。

> このケースなんかだと、Bitmap.Canvas.Handleだけ渡して、.dllの中で別にテンポラリのTCanvas作って、
> そのHandleに渡されたHandleを代入して使えばどう?

TCanvas は、ペンやブラシなどリソースマネージャが関与するデバイスコンテキストハンドル
のラッパです。DLL と exe とで別々のマネージャを持ってるのにハンドルだけ渡して
うまくいくわけ無いでしょ。一見うまくいくとしても、一方での内容変更が他方での
変更に自動的に反映するわけじゃないので齟齬が生じます。

TCanvas.Handle を DLL と exe で渡せないことは Delphi-ML でも過去に話題になりました。

VCL オブジェクトは、exe 内、 dll 内 で作成してその中で使う分には問題ないです。
やり取りはできません。