|
What does your base class represent?
If you want the controls to inherit from your class, then Why do you need Multithreaded-database access per control??
Your classes should represent entities like record and recordset. And then you need RFX mechanism for the controls!
|
|
|
|
|
It represents a window that when created or subclassed, will start a thread that performs the database access. When properly implemented, the dialog and controls can be created much faster, providing an application that is responsive. Put together a dialog with 4 listboxes, 8 comboboxes, 1 list control and if you try to populate the data in these controls during OnInitDialog(), all it takes is for just one of the controls to have to load a large number of records, eg. a couple of thousand, and your user has to sit and wait. But if the OnCreate or PreSubclass method is used to start a thread that populates the data, then the dialog appears much quicker and is more responsive.
Chris
|
|
|
|
|
Sounds Cool! But why don't you create base classes like CSQLQuery, CRecordset
and then derive CDialogRecordset from that. You can make your CDialogRecordset class so that it would create a second thread and does the work there... and it uploads the controls automatically!
You also need to define some MACROS to MAP dialog controls to certain fields!
Does this work?
|
|
|
|
|
I maybe totally off the mark here, but have you considered making your class a template class?
<br />
template <typename T><br />
class CMTDBWnd : public T<br />
{<br />
};<br />
and then use it like so...
CMTDBWnd<CListCtrl> m_listCtrl;
HTH
Jignesh
|
|
|
|
|
You've probably given me a pretty good reason to dig up a tutorial on building templates
I've only used templates minimally in the past, but this seems like an idea to persue.
Thanks for the suggestion.
Chris
|
|
|
|
|
I am getting the following linkage problem to occur when building. MSDN says they have a solution but
I can't seem to make the solution work.
mfcs42d.lib(dllmodul.obj) : error LNK2005: _DllMain@12 already defined in CreateCharacterCls.obj
mfcs42d.lib(dllmodul.obj) : error LNK2005: __pRawDllMain already defined in CreateCharacterCls.obj
What I try is placing mfcs42d.lib in the Object/library module box under links under project settings, which looked to be what microsoft was trying to tell me. (I also tried placing in under libraries to ignore since that was also mentioned. Perhaps I using the wrong libraries.)
Does anyone know the real solution around this. Either I'm reading the microsoft solution wrong, or it's not descriptive enough on the solution.
Thanks!
|
|
|
|
|
It looks like the simpler solution (from MSDN) would be:
"When using MFC libraries, you must make sure they are linked before the CRT library. This can be done by ensuring every file in your project includes ..\Msdev\Mfc\Include\Afx.h first, either directly [#include <afx.h>] or indirectly [#include <Stdafx.h>]. The Afx.h include file forces the correct order of the libraries, by using the #pragma comment [lib,"<libname>"] directive. [from PRB: LNK2005 Errors When Link C Run-Time Libs Before MFC Libs ]
Just making sure all your .cpp files include stdafx.h might do it.
|
|
|
|
|
Not quite. Every cpp file already had a Stdafx.h included.
|
|
|
|
|
Well, guess we're on the same help page anyway - would be interesting to look at the output if you type /verbose:lib into the project options on the link tab.
Also, note that when you put the lib in the modules list it should be at the beginning. (I know, it says that - just a double check!) Still, the verbose info should be helpful.
|
|
|
|
|
This thing reads like satellite instructions. From what I can tell I think the problem lies in the mfcs42.lib, but I really don't know what they mean by fixing this. This is a MFC module. Not mine. Unless the fix is within my module.
Linking...
Searching Libraries
Searching C:\Program Files\Microsoft Visual Studio\VC98\MFC\LIB\mfcs42d.lib:
mfcs42d.lib(dllmodul.obj) : error LNK2005: _DllMain@12 already defined in CreateCharacterCls.obj
mfcs42d.lib(dllmodul.obj) : error LNK2005: __pRawDllMain already defined in CreateCharacterCls.obj
Searching \Program Files\Microsoft Visual Studio\MyProjects\RoleMaker\CharacterCls\Debug\CharacterCls.lib:
Searching \Program Files\Microsoft Visual Studio\MyProjects\RoleMaker\DatabaseRoutinesCls\Debug\DatabaseRoutinesCls.lib:
Searching \Program Files\Microsoft Visual Studio\MyProjects\RoleMaker\CustomCtrlsCls\Debug\CustomCtrlsCls.lib:
Searching C:\Program Files\Microsoft Visual Studio\VC98\MFC\LIB\mfc42d.lib:
Searching C:\Program Files\Microsoft Visual Studio\VC98\LIB\msvcrtd.lib:
Searching C:\Program Files\Microsoft Visual Studio\VC98\LIB\kernel32.lib:
Searching C:\Program Files\Microsoft Visual Studio\VC98\LIB\user32.lib:
Searching C:\Program Files\Microsoft Visual Studio\VC98\LIB\gdi32.lib:
Searching C:\Program Files\Microsoft Visual Studio\VC98\LIB\comdlg32.lib:
Searching C:\Program Files\Microsoft Visual Studio\VC98\LIB\winspool.lib:
Searching C:\Program Files\Microsoft Visual Studio\VC98\LIB\advapi32.lib:
Searching C:\Program Files\Microsoft Visual Studio\VC98\LIB\shell32.lib:
Searching C:\Program Files\Microsoft Visual Studio\VC98\LIB\comctl32.lib:
Searching C:\Program Files\Microsoft Visual Studio\VC98\LIB\uuid.lib:
Searching C:\Program Files\Microsoft Visual Studio\VC98\MFC\LIB\mfco42d.lib:
Searching C:\Program Files\Microsoft Visual Studio\VC98\LIB\oledlg.lib:
Searching C:\Program Files\Microsoft Visual Studio\VC98\LIB\ole32.lib:
Searching C:\Program Files\Microsoft Visual Studio\VC98\LIB\olepro32.lib:
Searching C:\Program Files\Microsoft Visual Studio\VC98\LIB\oleaut32.lib:
Searching C:\Program Files\Microsoft Visual Studio\VC98\LIB\urlmon.lib:
Searching C:\Program Files\Microsoft Visual Studio\VC98\MFC\LIB\mfcd42d.lib:
Searching C:\Program Files\Microsoft Visual Studio\VC98\LIB\odbc32.lib:
Searching C:\Program Files\Microsoft Visual Studio\VC98\LIB\odbccp32.lib:
Searching C:\Program Files\Microsoft Visual Studio\VC98\LIB\daouuid.lib:
Searching C:\Program Files\Microsoft Visual Studio\VC98\MFC\LIB\mfcn42d.lib:
Searching C:\Program Files\Microsoft Visual Studio\VC98\LIB\wsock32.lib:
Searching C:\Program Files\Microsoft Visual Studio\VC98\LIB\OLDNAMES.lib:
Searching C:\Program Files\Microsoft Visual Studio\VC98\MFC\LIB\mfcs42d.lib:
Searching \Program Files\Microsoft Visual Studio\MyProjects\RoleMaker\CharacterCls\Debug\CharacterCls.lib:
Searching \Program Files\Microsoft Visual Studio\MyProjects\RoleMaker\DatabaseRoutinesCls\Debug\DatabaseRoutinesCls.lib:
Searching \Program Files\Microsoft Visual Studio\MyProjects\RoleMaker\CustomCtrlsCls\Debug\CustomCtrlsCls.lib:
Searching C:\Program Files\Microsoft Visual Studio\VC98\MFC\LIB\mfc42d.lib:
Searching C:\Program Files\Microsoft Visual Studio\VC98\LIB\msvcrtd.lib:
Searching C:\Program Files\Microsoft Visual Studio\VC98\LIB\kernel32.lib:
Searching C:\Program Files\Microsoft Visual Studio\VC98\LIB\user32.lib:
Searching C:\Program Files\Microsoft Visual Studio\VC98\LIB\gdi32.lib:
Searching C:\Program Files\Microsoft Visual Studio\VC98\LIB\comdlg32.lib:
Searching C:\Program Files\Microsoft Visual Studio\VC98\LIB\winspool.lib:
Searching C:\Program Files\Microsoft Visual Studio\VC98\LIB\advapi32.lib:
Searching C:\Program Files\Microsoft Visual Studio\VC98\LIB\shell32.lib:
Searching C:\Program Files\Microsoft Visual Studio\VC98\LIB\comctl32.lib:
Searching C:\Program Files\Microsoft Visual Studio\VC98\LIB\uuid.lib:
Searching C:\Program Files\Microsoft Visual Studio\VC98\MFC\LIB\mfco42d.lib:
Searching C:\Program Files\Microsoft Visual Studio\VC98\LIB\oledlg.lib:
Searching C:\Program Files\Microsoft Visual Studio\VC98\LIB\ole32.lib:
Searching C:\Program Files\Microsoft Visual Studio\VC98\LIB\olepro32.lib:
Searching C:\Program Files\Microsoft Visual Studio\VC98\LIB\oleaut32.lib:
Searching C:\Program Files\Microsoft Visual Studio\VC98\LIB\urlmon.lib:
Done Searching Libraries
mfcs42d.lib(dllmodul.obj) : warning LNK4006: _DllMain@12 already defined in CreateCharacterCls.obj; second definition ignored
mfcs42d.lib(dllmodul.obj) : warning LNK4006: __pRawDllMain already defined in CreateCharacterCls.obj; second definition ignored
Creating library Debug/CreateCharacterCls.lib and object Debug/CreateCharacterCls.exp
Searching Libraries
Searching C:\Program Files\Microsoft Visual Studio\VC98\MFC\LIB\mfcs42d.lib:
Searching \Program Files\Microsoft Visual Studio\MyProjects\RoleMaker\CharacterCls\Debug\CharacterCls.lib:
Searching \Program Files\Microsoft Visual Studio\MyProjects\RoleMaker\DatabaseRoutinesCls\Debug\DatabaseRoutinesCls.lib:
Searching \Program Files\Microsoft Visual Studio\MyProjects\RoleMaker\CustomCtrlsCls\Debug\CustomCtrlsCls.lib:
Searching C:\Program Files\Microsoft Visual Studio\VC98\MFC\LIB\mfc42d.lib:
Searching C:\Program Files\Microsoft Visual Studio\VC98\LIB\msvcrtd.lib:
Searching C:\Program Files\Microsoft Visual Studio\VC98\LIB\kernel32.lib:
Searching C:\Program Files\Microsoft Visual Studio\VC98\LIB\user32.lib:
Searching C:\Program Files\Microsoft Visual Studio\VC98\LIB\gdi32.lib:
Searching C:\Program Files\Microsoft Visual Studio\VC98\LIB\comdlg32.lib:
Searching C:\Program Files\Microsoft Visual Studio\VC98\LIB\winspool.lib:
Searching C:\Program Files\Microsoft Visual Studio\VC98\LIB\advapi32.lib:
Searching C:\Program Files\Microsoft Visual Studio\VC98\LIB\shell32.lib:
Searching C:\Program Files\Microsoft Visual Studio\VC98\LIB\comctl32.lib:
Searching C:\Program Files\Microsoft Visual Studio\VC98\LIB\uuid.lib:
Searching C:\Program Files\Microsoft Visual Studio\VC98\MFC\LIB\mfco42d.lib:
Searching C:\Program Files\Microsoft Visual Studio\VC98\LIB\oledlg.lib:
Searching C:\Program Files\Microsoft Visual Studio\VC98\LIB\ole32.lib:
Searching C:\Program Files\Microsoft Visual Studio\VC98\LIB\olepro32.lib:
Searching C:\Program Files\Microsoft Visual Studio\VC98\LIB\oleaut32.lib:
Searching C:\Program Files\Microsoft Visual Studio\VC98\LIB\urlmon.lib:
Searching C:\Program Files\Microsoft Visual Studio\VC98\MFC\LIB\mfcd42d.lib:
Searching C:\Program Files\Microsoft Visual Studio\VC98\LIB\odbc32.lib:
Searching C:\Program Files\Microsoft Visual Studio\VC98\LIB\odbccp32.lib:
Searching C:\Program Files\Microsoft Visual Studio\VC98\LIB\daouuid.lib:
Searching C:\Program Files\Microsoft Visual Studio\VC98\MFC\LIB\mfcn42d.lib:
Searching C:\Program Files\Microsoft Visual Studio\VC98\LIB\wsock32.lib:
Searching C:\Program Files\Microsoft Visual Studio\VC98\LIB\OLDNAMES.lib:
Done Searching Libraries
C:/Windows/System/CreateCharacterCls.dll : fatal error LNK1169: one or more multiply defined symbols found
Error executing link.exe.
CreateCharacterCls.dll - 3 error(s), 22 warning(s)
|
|
|
|
|
The above response is from me. It says anonymous. I sent this without signing on. Just clearing any confusion.
"Why are we hiding from the police, Daddy?"
"We use VI, son. They use Emacs."
|
|
|
|
|
Are you building an MFC extension DLL? Is it using AFX_MANAGE_STATE(AfxGetStaticModuleState( ) )? There's an article [Q161589] that describes this as an error in the docs that can lead to this link problem.
The output you posted was not what I expected - I thought the error would happen later and point to an obj file that wasn't bringing in the afx stuff.
BTW sometimes you can /force linkage in this type of scenario (Force file output on the Link / customize tab) but do this only for an experiment.
|
|
|
|
|
The tech docs referenced here fixed the problem.
FYI. using FORCE will help with the problem but will reak havoc during run time. I can't remember the specifics, but it causes problems with dialog based DLLs.
Thanks for the insight!
Chris
"Why are we hiding from the police, Daddy?"
"We use VI, son. They use Emacs."
|
|
|
|
|
|
|
Thank you, please continue !
|
|
|
|
|
|
CFile::Read( void* lpBuf, UINT nCount );
CFile::Read returns the number of bytes transferred to the buffer. If the value returned is less than nCount the end of file was reached.
Cheers!!!
Carlos Antollini.
|
|
|
|
|
I can display that 0-10 numbers....but then get a memory error message.....what's wrong?
int *pPtr;
pPtr = new int;
CString a;
for (int i=0; i<=10; i++)
{
*(pPtr+i) = i;
Display Pointer here.......
}
delete pPtr;
|
|
|
|
|
If you have only 10 items in the array, use ; i < 10 ; in the loop (0 to 9 are valid indices). A common gotcha, to be sure.
|
|
|
|
|
Actually, I'm looking for a infinite size of "array", so I want to see if i can use pointer to do that.......sometimes i need 10....but sometimes i need 40......that's why i create pointer.....
Do you know how?
|
|
|
|
|
Ah - ok - didn't look at your code carefully enough.
What you are doing is going to act differently in debug, release, and where the pointer is declared (in a function (on the stack) or global (on the heap). You will be able to store to the pointer as long as the increment doesn't take it outside of a valid memory location (which would be an access violation). But you will probably end up overwriting some other important data, which can corrupt the heap or the stack.
What you are looking for is, I think, a dynamic array - one which you can assign values to and have the array allocate more memory 'on the fly' to accomodate if necessary.
The STL's vector would be useful in this case - very handy. If you'd like to roll your own, you might want to look at MSPutils.h (in the platform SDK), which implements a simple placement new based container for Plain Old Data (POD) types - A related class is CSimpleArray, which extends this to classes with constructors and destructors.
But I think you should look at CArray (MFC) or vector (STL).
|
|
|
|
|
You've allocated space for one integer with 'new int'. You're trying to write 11 integers using *(pPtr + i). If you want this to work OK, you should use 'new int[11]'
Tomasz Sowinski -- http://www.shooltz.com.pl
|
|
|
|
|
Unless I'm mistaken here, the line of code causing the memory error is
*(pPtr+i) = i;
You are trying to cause the pointer to point to memory that you have not allocated. Too boot, you then attempt to change the contents of that location by doing the assignment operation.
Chris
|
|
|
|
|
But I don't want to fix the number of elements......I want to create an infinite "array"......I can insert elements in this list unlimited........
Do you know how to do that?????
THANK YOU
|
|
|
|