To summarize what I did.

1) Make sure that in your CW.RED file the entries for DLL and LIB read 
".;Whatever was there before" This is not neccessary but makes life easier.

2) Created dictionary

3) Created application TESTDLL.APP using the wizard. I set target type to DLL, deleted MAIN and set the first proc (APPLICATION / PROPERTIES) to CustBrowse. This is not strictly neccessary but you must make sure that MAIN is not exported, eg you can create an exe for testing and change to DLL when you are satisfied.

4) Went to Global Properties and under FILE CONTROL FLAGS set GENERATE ALL FILE DECLARATIONS and checked EXPORT ALL FILE DECLARATIONS.

5) Compiled and linked (built) the app

6) Created TESTEXE.APP using the same dictionary but not the wizard.

7) Created MAIN as an APPFRAME, editted the menu and for the actions used CALL A PROCEDURE and the same proc names as the Dll's. (Used threaded attribute)

8) Went to APPLICATION / INSERT MODULE / EXTERNAL DLL and selected "TESTDLL.LIB"

9) Went to GLOBAL and Checked GENERATE GLOBAL DATA AS EXTERNAL. Under FILE ATTRIBUTES I set ALL EXTERNAL and ALL FILES ARE DECLARED IN ANOTHER APP.

10) I hit the RUN speedbutton and the application worked as advertised.

There you go - in ten easy steps <g>.

Everything you put in your DLL will work exectly as if it were in the EXE. Your external procs can be in another DLL (even if you are in a DLL). If you are planning to use multiple Dll's treat one as for TESTDLL and the rest as for TESTEXE but set their targets to DLL's.

My main CW application has 11 Dll's written in Clarion so I guess it should work.

If you have any questions please don't hesitate to ask
