MFC DLL's
Gerry Sweeney -- gerry@hornbill.demon.co.uk Tuesday, February 13, 1996 Hi All, I have a 16bit application written using MFC 2.5. As the executable size is growing I thought I would use the DLL version of the MFC library. I set out and built a version specifying the _AFXDLL option and got a large amount of linker errors. I need to mention at this point that I have added some additional collection classes to the base MFC library by using the TEMPLDEF utility and adding the generated source files to the library before rebuilding it. All of my linker errors where related to these additional collection classes. I search the library source and found two source files for the DLL version of the library that had the following lines:- FORCE_VECTOR(CMapStringToOb) There seemed to be one of these for allot of the classes in the MFC so I added one for each of the collection classes I had added i.e. FORCE_VECTOR(CMapStringToDWord) FORCE_VECTOR(CMapDWordToOb) I thought, This must be it. I rebuilt the MFC250D.DLL and my application and still the linker errors persisted. I searched again for any occurrence of the 'CMapStringToOb' class and found some more references in the file MFC250.DEF. This file has the exported name for every class and member function in the MFC by the looks of it. I though to my self all I have to do is export the class and functions of the additional classes and hey presto! My questions are:- Does anyone know what the FORCE_VECTOR macro does? Can anyone tell me what the exported names in the MFC250.DEF file mean. Surely this file is generated somehow. If not I would like to know how I decide what names to call all of the exported classes/members. Any help on this would be gratefully received, As I am truly stuck on this Thanks Gerry Sweeney gerry@hornbill.com
Elliott Kleinrock -- ELLIOTT@flexi.com Friday, February 16, 1996 If any part of you application is an _AFXDLL then ALL parts must be. Therefore follow the steps in TechNote 33 for all .dll's .lib's and the .exe. The relevant part of TechNote 33 follows: Building with Visual Workbench If you are using the internal makefile with most of the standard defaults, you can easily change the project to build the DLL version. The following steps assume you have a correctly functioning large model MFC application linked with LAFXCWD.LIB (for debug) and LAFXCW.LIB (for retail) and you want to convert it to use the shared _AFXDLL version of the library. You are running Visual Workbench. In the main Project Options dialog, Uncheck the "Use Microsoft Foundation Classes" check box. We will explicitly add the appropriate version of the MFC library later. In the Project Options Compiler dialog, change the following options that are common to both Debug and Release: Memory Model: Set the Model to Large (if not already set). Preprocessor: To the Symbols and Macros to Define add _AFXDLL. Don't forget the underscore! Windows Prolog/Epilog: Check the Generate for __far Functions check box. In the Project Options Linker dialog, change the following For the Debug Specific options: add MFC250D.LIB to the beginning of the list of libraries. If you are using the MFC/OLE classes, add MFCO250D.LIB as well. Likewise, add MFCD250D.LIB as well when using the Database classes. For the Release Specific options: add MFC250.LIB to the beginning of the list of libraries. If you are using the MFC/OLE classes, add MFCO250.LIB as well. Likewise, add MFCD250.LIB as well when using the Database classes. Optionally, in the Project Options Resources dialog, add /D_AFXDLL to "Custom Options". This makes your final executable smaller by sharing the resources that are present in the MFC DLLs. Accept (OK) all changes. A full rebuild of your application is required after these changes are made. ---------- From: owner-mfc-l To: MFC List Subject: MFC DLL's Date: Tuesday, February 13, 1996 1:53PM Hi All, I have a 16bit application written using MFC 2.5. As the executable size is growing I thought I would use the DLL version of the MFC library. I set out and built a version specifying the _AFXDLL option and got a large amount of linker errors. I need to mention at this point that I have added some additional collection classes to the base MFC library by using the TEMPLDEF utility and adding the generated source files to the library before rebuilding it. All of my linker errors where related to these additional collection classes. I search the library source and found two source files for the DLL version of the library that had the following lines:- FORCE_VECTOR(CMapStringToOb) There seemed to be one of these for allot of the classes in the MFC so I added one for each of the collection classes I had added i.e. FORCE_VECTOR(CMapStringToDWord) FORCE_VECTOR(CMapDWordToOb) I thought, This must be it. I rebuilt the MFC250D.DLL and my application and still the linker errors persisted. I searched again for any occurrence of the 'CMapStringToOb' class and found some more references in the file MFC250.DEF. This file has the exported name for every class and member function in the MFC by the looks of it. I though to my self all I have to do is export the class and functions of the additional classes and hey presto! My questions are:- Does anyone know what the FORCE_VECTOR macro does? Can anyone tell me what the exported names in the MFC250.DEF file mean. Surely this file is generated somehow. If not I would like to know how I decide what names to call all of the exported classes/members. Any help on this would be gratefully received, As I am truly stuck on this Thanks Gerry Sweeney gerry@hornbill.com
| Вернуться в корень Архива |