Package vs Static Lib vs DLL Questions

I have a working BCB5pro app that I have been working on for a few months. I
now want to Move all the core elements to either a runtime package, DLL, or
static Lib for manageability. The core elements consist of many forms,
classes(including database stuff), and system typedefs and #defines. In
addition to doing this for manageability I also want to do it so I can give
my customers the capability to maintain the product via BCB without having
access to all the propritary stuff in the core. With that said, here are my
questions:

1)Which method woud be best for this (runtime package, DLL, static lib)

2)For the answer to 1, where can I find detailed info/tutorials on the
process. All the docs I can find on any of the above methods are weak at
best.

3)In the core there is a main class, call it CGui, which uses other core
classes to implement most of the functionallity of the app so I figured that
with this in a Lib or something I would just create a var from it in a new
app and thus achieving my goal. However, there are some objects in the core
that need access to the object of CGui type to call member functions. Is
this going to be possible since the actual Object would be created from the
app that is using the Lib? If not, what do you recommend doing?

Thanks for any help in advance.

Jeff