I am programming a DLL. I have to return an instance of TBitmap to the host application. The DLL has another UNIT, wich is a Form, that it has a TImageList for storing images. I wrote a function that I want to return an Image from the TImageList (from the DLL to the host application. How can I do this?
Thanks, Yulién.
Basically what you need to do is not return an object. In this case you want to return bitmap, why not just return HBitmap handle?
Objects are combinations of code and data. A normal DLL does not support that, because it only supports the C Application Binary Interface (C ABI) but there is a kind of DLLs that does: BPL files. In other words, you need to create a .bpl file and not a .dll file. This requires both that file and the user to be Delphi, of course.
You can't return an object per se, but you can return a pointer to an object. Refer to Mastering Delphi 6 and this description of Vtables in delphi.
Read this old thread on borland.public.delphi.nativeapi: Delphi Object in DLL - does this work?.
The link to a .pdf in the last message is gone, but thanks to Internet Archive Wayback Machine one can download it (look at Exporting Objects from DLLs at page 412).
Edit: it turns out that book's interesting part, for our purpose, is also available @ Google Books, so one can read it on-line.