Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. General Programming
  3. C / C++ / MFC
  4. MFC42.DLL in .NET Apps

MFC42.DLL in .NET Apps

Scheduled Pinned Locked Moved C / C++ / MFC
csharpc++helpquestion
13 Posts 6 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • R Offline
    R Offline
    RichardEastes
    wrote on last edited by
    #1

    When I compile my application using VC++ 6.0, my app requres MFC42.DLL while if compiled with VC++.net, is requires MFC70.DLL Is there a way to compile using .net AND forcing it to link to MFC42.DLL and not MFC70.DLL ??? PLEASE help. Rick Eastes. ------------

    M 1 Reply Last reply
    0
    • R RichardEastes

      When I compile my application using VC++ 6.0, my app requres MFC42.DLL while if compiled with VC++.net, is requires MFC70.DLL Is there a way to compile using .net AND forcing it to link to MFC42.DLL and not MFC70.DLL ??? PLEASE help. Rick Eastes. ------------

      M Offline
      M Offline
      Michael Dunn
      wrote on last edited by
      #2

      The MFC in VC7 is version 7, that's why the EXE uses mfc70.dll. --Mike-- Just released - RightClick-Encrypt v1.4 - Adds fast & easy file encryption to Explorer My really out-of-date homepage Sonork-100.19012 Acid_Helm

      R 1 Reply Last reply
      0
      • M Michael Dunn

        The MFC in VC7 is version 7, that's why the EXE uses mfc70.dll. --Mike-- Just released - RightClick-Encrypt v1.4 - Adds fast & easy file encryption to Explorer My really out-of-date homepage Sonork-100.19012 Acid_Helm

        R Offline
        R Offline
        RichardEastes
        wrote on last edited by
        #3

        Obviously. However, the .net framework (20MB) is certainly not small. I don't want to distribute this dll when mfc42.dll would be fine. Rick Eastes. ------------

        M S 2 Replies Last reply
        0
        • R RichardEastes

          Obviously. However, the .net framework (20MB) is certainly not small. I don't want to distribute this dll when mfc42.dll would be fine. Rick Eastes. ------------

          M Offline
          M Offline
          Michael P Butler
          wrote on last edited by
          #4

          You should just be able to distribute the MFC7 dlls. The .NET framework is only required for managed applications. Michael :-) Time flies like an arrow. Fruit flies like a banana

          1 Reply Last reply
          0
          • R RichardEastes

            Obviously. However, the .net framework (20MB) is certainly not small. I don't want to distribute this dll when mfc42.dll would be fine. Rick Eastes. ------------

            S Offline
            S Offline
            Stephane Rodriguez
            wrote on last edited by
            #5

            From VS.Net redist.txt file :

            The following merge modules have been provided for use when
            redistributing the Visual C++ runtime files. Redistributing
            the merge modules is the recommended method for the
            redistribution of these files.

            VC_atl70.msm
            atl70.dll (UNICODE)
            atl70.dll (ANSI)

            VC_CRT.msm
            msvcr70.dll

            VC_CRT_IO.msm
            msvci70.dll

            VC_MFC.msm
            mfc70.dll
            mfc70u.dll

            GDIPlus.msm
            gdiplus.dll

            MFC_Loc_E.msm
            mfc70deu.dll
            mfc70esp.dll
            mfc70fra.dll
            mfc70ita.dll

            MFC_Loc_FE.msm
            mfc70chs.dll
            mfc70cht.dll
            mfc70jpn.dll
            mfc70kor.dll

            VC_STL.msm
            mscvp70.dll

            What they are saying is that redistribuing DLLs is wrong and obstrusive to the new XP install procedure. You must distribute what they call Merge modules (.msm files). Btw, .mcm is a subformat of the general Windows Installer SDK (.msi database). Otherwise it won't install on XP, depending on the profile. Have fun.:~ And if you still want to distribute sharewares on a low deployment basis (for 9x for instance), just distribute these : mfc70.dll msvcr70.dll msvcp70.dll (stl) msvci70.dll I recommend to put these files in the app directory, not on system32.


            And I swallow a small raisin.

            D 1 Reply Last reply
            0
            • S Stephane Rodriguez

              From VS.Net redist.txt file :

              The following merge modules have been provided for use when
              redistributing the Visual C++ runtime files. Redistributing
              the merge modules is the recommended method for the
              redistribution of these files.

              VC_atl70.msm
              atl70.dll (UNICODE)
              atl70.dll (ANSI)

              VC_CRT.msm
              msvcr70.dll

              VC_CRT_IO.msm
              msvci70.dll

              VC_MFC.msm
              mfc70.dll
              mfc70u.dll

              GDIPlus.msm
              gdiplus.dll

              MFC_Loc_E.msm
              mfc70deu.dll
              mfc70esp.dll
              mfc70fra.dll
              mfc70ita.dll

              MFC_Loc_FE.msm
              mfc70chs.dll
              mfc70cht.dll
              mfc70jpn.dll
              mfc70kor.dll

              VC_STL.msm
              mscvp70.dll

              What they are saying is that redistribuing DLLs is wrong and obstrusive to the new XP install procedure. You must distribute what they call Merge modules (.msm files). Btw, .mcm is a subformat of the general Windows Installer SDK (.msi database). Otherwise it won't install on XP, depending on the profile. Have fun.:~ And if you still want to distribute sharewares on a low deployment basis (for 9x for instance), just distribute these : mfc70.dll msvcr70.dll msvcp70.dll (stl) msvci70.dll I recommend to put these files in the app directory, not on system32.


              And I swallow a small raisin.

              D Offline
              D Offline
              Daniel Turini
              wrote on last edited by
              #6

              StephaneRodriguez wrote: I recommend to put these files in the app directory, not on system32. If you do this, it's better statically linking to MFC. This way, the installer size will be smaller, since only the needed code will go to the final .EXE Concussus surgo. When struck I rise.

              S R 2 Replies Last reply
              0
              • D Daniel Turini

                StephaneRodriguez wrote: I recommend to put these files in the app directory, not on system32. If you do this, it's better statically linking to MFC. This way, the installer size will be smaller, since only the needed code will go to the final .EXE Concussus surgo. When struck I rise.

                S Offline
                S Offline
                Stephane Rodriguez
                wrote on last edited by
                #7

                Well Daniel I believe you're right, at least in theory, But in practice I have had so many problems with statically linked MFCs, especially when I tried to run my .exe on someone else machine with sometimes another OS, that I have decided that static linking of the MFCs was not for me. The problem was most of the time a crude GPF! (memory access violation). In fact, the only *good reason* not to put the MFCs in your app directory is that the MFCs are not only DLLs, they are COM components, and self-register themselves each time they are loaded, hence overwriting the registry, which may lead to unpredictable consequences on the stability of other installed MFC apps, especially after uninstall.


                And I swallow a small raisin.

                J D 2 Replies Last reply
                0
                • D Daniel Turini

                  StephaneRodriguez wrote: I recommend to put these files in the app directory, not on system32. If you do this, it's better statically linking to MFC. This way, the installer size will be smaller, since only the needed code will go to the final .EXE Concussus surgo. When struck I rise.

                  R Offline
                  R Offline
                  RichardEastes
                  wrote on last edited by
                  #8

                  My MFC application compiles successfully in both VC++7.0 and VC++6.0 but I feel I have wasted my time and money buying VC++7.0 WHY? I need to have a small distributable. Here are two senarios: 1. Compile with .NET Need MFC70.dll which most computers don't have. 2. Compile with VC6 Runs on ALL computers without ANY additional dll's :mad:Surely there is a way using .NET to make the exe link to old dll's like MFC42.DLL and not new ones like MFC70.DLL Rick Eastes. ------------ http://www.eastes.net

                  S D 2 Replies Last reply
                  0
                  • S Stephane Rodriguez

                    Well Daniel I believe you're right, at least in theory, But in practice I have had so many problems with statically linked MFCs, especially when I tried to run my .exe on someone else machine with sometimes another OS, that I have decided that static linking of the MFCs was not for me. The problem was most of the time a crude GPF! (memory access violation). In fact, the only *good reason* not to put the MFCs in your app directory is that the MFCs are not only DLLs, they are COM components, and self-register themselves each time they are loaded, hence overwriting the registry, which may lead to unpredictable consequences on the stability of other installed MFC apps, especially after uninstall.


                    And I swallow a small raisin.

                    J Offline
                    J Offline
                    Joel Lucsy
                    wrote on last edited by
                    #9

                    StephaneRodriguez wrote: But in practice I have had so many problems with statically linked MFCs, especially when I tried to run my .exe on someone else machine with sometimes another OS, that I have decided that static linking of the MFCs was not for me. The problem was most of the time a crude GPF! (memory access violation). I've never had a problem with statically linking. Perhaps you wrote some bad code? StephaneRodriguez wrote: In fact, the only *good reason* not to put the MFCs in your app directory is that the MFCs are not only DLLs, they are COM components, and self-register themselves each time they are loaded, hence overwriting the registry, which may lead to unpredictable consequences on the stability of other installed MFC apps, especially after uninstall. Yikes! I still suspect that isn't true, but I greped the mfc dlls and mfc42.dll has DllRegisterServer in it. Thankfully none of the MFC70.dll's have that in there so maybe they've changed things. Joel Lucsy (jjlucsy@ameritech.net)

                    1 Reply Last reply
                    0
                    • R RichardEastes

                      My MFC application compiles successfully in both VC++7.0 and VC++6.0 but I feel I have wasted my time and money buying VC++7.0 WHY? I need to have a small distributable. Here are two senarios: 1. Compile with .NET Need MFC70.dll which most computers don't have. 2. Compile with VC6 Runs on ALL computers without ANY additional dll's :mad:Surely there is a way using .NET to make the exe link to old dll's like MFC42.DLL and not new ones like MFC70.DLL Rick Eastes. ------------ http://www.eastes.net

                      S Offline
                      S Offline
                      Stephane Rodriguez
                      wrote on last edited by
                      #10

                      Yes, somewhat waste of money especially if you don't have C# in the package you bought. What's more is that MFC70 has STL embedded everywhere, much harder to debug a callstack than the previous release IMHO. For some programmers however, MFC70 is a new step to achieve robustness and so on,


                      And I swallow a small raisin.

                      1 Reply Last reply
                      0
                      • S Stephane Rodriguez

                        Well Daniel I believe you're right, at least in theory, But in practice I have had so many problems with statically linked MFCs, especially when I tried to run my .exe on someone else machine with sometimes another OS, that I have decided that static linking of the MFCs was not for me. The problem was most of the time a crude GPF! (memory access violation). In fact, the only *good reason* not to put the MFCs in your app directory is that the MFCs are not only DLLs, they are COM components, and self-register themselves each time they are loaded, hence overwriting the registry, which may lead to unpredictable consequences on the stability of other installed MFC apps, especially after uninstall.


                        And I swallow a small raisin.

                        D Offline
                        D Offline
                        Daniel Turini
                        wrote on last edited by
                        #11

                        StephaneRodriguez wrote: In fact, the only *good reason* not to put the MFCs in your app directory is that the MFCs are not only DLLs, they are COM components, and self-register themselves each time they are loaded, hence overwriting the registry, which may lead to unpredictable consequences on the stability of other installed MFC apps, especially after uninstall. This isn't true: 1. MFC dlls are not COM components. You can't regsvr32 mfc70.dll. (But you can create COM components with MFC). 2. COM components doesn't register themselves each time they are loaded. 3. With a COM DLL, it doesn't help installing the DLL on your app directory, because, when registered, it will be the only one DLL to be instantiated. Concussus surgo. When struck I rise.

                        S 1 Reply Last reply
                        0
                        • R RichardEastes

                          My MFC application compiles successfully in both VC++7.0 and VC++6.0 but I feel I have wasted my time and money buying VC++7.0 WHY? I need to have a small distributable. Here are two senarios: 1. Compile with .NET Need MFC70.dll which most computers don't have. 2. Compile with VC6 Runs on ALL computers without ANY additional dll's :mad:Surely there is a way using .NET to make the exe link to old dll's like MFC42.DLL and not new ones like MFC70.DLL Rick Eastes. ------------ http://www.eastes.net

                          D Offline
                          D Offline
                          Daniel Turini
                          wrote on last edited by
                          #12

                          RickEastes wrote: Surely there is a way using .NET to make the exe link to old dll's like MFC42.DLL and not new ones like MFC70.DLL Have you tried changing the LIB and INCLUDE search paths ? This probably would help... Concussus surgo. When struck I rise.

                          1 Reply Last reply
                          0
                          • D Daniel Turini

                            StephaneRodriguez wrote: In fact, the only *good reason* not to put the MFCs in your app directory is that the MFCs are not only DLLs, they are COM components, and self-register themselves each time they are loaded, hence overwriting the registry, which may lead to unpredictable consequences on the stability of other installed MFC apps, especially after uninstall. This isn't true: 1. MFC dlls are not COM components. You can't regsvr32 mfc70.dll. (But you can create COM components with MFC). 2. COM components doesn't register themselves each time they are loaded. 3. With a COM DLL, it doesn't help installing the DLL on your app directory, because, when registered, it will be the only one DLL to be instantiated. Concussus surgo. When struck I rise.

                            S Offline
                            S Offline
                            Stephane Rodriguez
                            wrote on last edited by
                            #13

                            Daniel Turini wrote: MFC dlls are not COM components Fair enough for mfc7, I admit I didn't chcked the exports functions before posting an answer,


                            And I swallow a small raisin.

                            1 Reply Last reply
                            0
                            Reply
                            • Reply as topic
                            Log in to reply
                            • Oldest to Newest
                            • Newest to Oldest
                            • Most Votes


                            • Login

                            • Don't have an account? Register

                            • Login or register to search.
                            • First post
                              Last post
                            0
                            • Categories
                            • Recent
                            • Tags
                            • Popular
                            • World
                            • Users
                            • Groups