I converted MFC application to 64 bit using VS 2013. My exe is working in Release build.But As I run in Debug Build,it pops up with Window error saying "The Application was unable to start correctly(0x0c000007b).Click OK to close the application."
After Google, I tried different methods As suggested [Copied mfc100.dll,mfc00u.dll,msvcp100.dll,msvcr100.dll,msvcr100_clr0400.dll] to System32 folder.
I installed vs2010,vs2013 redistributable package too bt no Luck.
Debug builds are not intended to be run on other machines than the development system. So try to start your program in the debugger of your VS. If that works, all is OK.
Debug builds are linked to special versions of the runtime DLLs which did not exist on machines that have no VS installed. While it would be possible to copy these special DLLs, you should know that you are not allowed to do so.
Check the debug output window to see when the error appears. You may set a breakpoint at your InitInstance method. If the error appears before that it may be some DLL that does not match. Does your application uses some self-build or other non-MS DLLs? If so ensure that these DLLs are present as 64-bit versions. Check also your debug project settings for those DDLs to ensure that there is no entry to an old one.
The MS / MFC specific debug DLLs should be already present on your system (they have the letter 'd' at the end of the name).
This error comes on 64bits OS's when the loader try to link a wrong DLL (typically a 32bits DLL in a 64bits executable).
Check again your project and verify that you are correctly linking to 64bits versions of all DLL's.
Maybe your program use a DLL built for 32bits. The linking could complete even with wrong import library, then the error is triggered at loading time.
The most common case is when a manifest is present in whichever library reporting X86 build, the loader, and this made me mad, testardly try to load 32bits version of commctl32.dll
Using Excel Automation in Visual Studio 2010 C++, how do I define a name? As a user of Excel, you can enter a name that then can be used in formulas to refer to a range of cells. The range changes as the user inserts columns or rows. My program has worked with various versions of Excel dating back to the early 2000’s. I have a bunch of classes derived from COleDispatchDriver: CXLApplication, CXLRange, CXLWorkbook, CXLWorkbooks, and CXLWorksheet that have many functions, but I have no documentation (anybody have any clues on where to find documentation?). Anyone know how to define a named range using functions of these classes (probably CXLRange)?
These classes were generated years ago from the Excel type library using Class Wizard. I note that these classes can be generated using Class Wizard on Visual Studio 2010 as well: MFC Class Wizard->Add Class (arrow)->MFC Class from Typelib...->Add Class from Typelib Wizard->Available Type libraries: Microsoft Excel 15.0 Object Library<1.8>. Then you add the classes, using whatever names you want and the files are automatically generated. However, the classes in my legacy code are a bit different than later versions of Excel. Also if you know where to find documentation for these classes, it would be much appreciated.
I have tried making the preprocessor directive in the funcdefs.h file lower case (didn't make any difference) and have checked the include path using -H and it seems to find the file but cannot get it to link.
I might not have given you enough information. The actual text of the linking error message is:
In function `process(int, char*, ControlData*, char*, char*)':
PROCESS.CPP: (.text+0x788): undefined reference to `readsig(MiscParams*, char*)'
PROCESS.CPP: (.text+0xaac): undefined reference to `sig_save(Signal*, char*)'
PROCESS.CPP: (.text+0xdd4): undefined reference to `display(Signal*, MiscParams*, int)'.............
......etc etc etc
so there are many undefined references to functions from within the function 'process' contained in PROCESS.CPP
however; all these functions are defined in funcdefs.h as follows:
externint readsig ( MiscParams *misc , char *namelist , int *nsigs ,
Signal ***signals , char *error ) ;
etc etc etc
as I understand it, the various individual *.cpp files are referring to functions that are defined within funcdefs.h shouldn't these definitions be included from this file by the pre processor instruction and therefore be defined references?
Or are you saying that it is the function 'process' in PROCESS.CPP that is calling other undefined references? The very first such call is 'readsig' which is defined in functions.h
Or are you saying that I should just call functions.h functions.cpp?
This is driving me nuts so thanks for your help!
Jochen - I think I'm beginning to get your drift! The fundefs.h file only contains function prototypes not definitions
You must include the library or object modules that contains the actual code of the missing functions. As Jochen already mentioned, these are linker errors, nothing to do with compiling or header files.
If your question is, why the copy constructor and assignment operator are declared private: This is to prevent the users of the class from copying objects of that type. At least the assignment operator is created atomatically by the compiler, if the designer of the class doesn't explicitely specify one. This default assignment operator simply copies all members. So without the operator you could write
M m1, m2;
m2 = m1;
and it would compile. With this class definition as it is, you will get a compile time error that the operator is not accessible.
The good thing about pessimism is, that you are always either right or pleasently surprised.
I am new to COM. I have a DLL which is written in C. I want to make that DLL a COM dll. SO that i can register it and my application can use it. I tried google a lot. But not finding any satisfactory answer.
Please answer if you have any idea about how to achieve the said.