|
Put the OS specific code in two DLLs [one for 98/ME, the otjher for NT/2K]
Now dynamically load the correct DLL at run time
Nish
It's seven o'clock
On the dot
I'm in my drop top
Cruisin' the streets - Oh yeah
I got a real pretty, pretty little thing that's waiting for me
|
|
|
|
|
Jon Sagara wrote:
Bah - the point is moot. I don't need to do this after all.
Anyway, in your next project you may find #pragma comment(lib, "libname") helpful. Usually you nest this pragma inside #ifdef/#elif/#endif to get different libraries depending on some preprocessor symbol.
Tomasz Sowinski -- http://www.shooltz.com
|
|
|
|
|
can someone give me an idea how to write an algorithm that takes an array with N elements (some of those element could be duplicated in the array)
and returns a new array with all the elements of the previous array but without dulpicates.
thank you.
|
|
|
|
|
Easy - you need to either use a dynamic array like vector. Otherwise you need to make one pass to do a count of unique items, create a new array of that size, a second pass to add them all ( although I suspect <algorithm> will contain something to do both of these, a pointer is a valid STL iterator ), then delete the old array and return the new.
Christian
The tragedy of cyberspace - that so much can travel so far, and yet mean so little.
|
|
|
|
|
You might be able to get some ideas from the 'scatter sort' concept, if the range of values in the array is reasonable.
|
|
|
|
|
I used an activeX controle of type RichText to load a template letter and I wanted to modify its content by program. I have some tagged words in the text that I want to replace by the content of variables (names, address, ...).
But as soon that I load the content of this richtext in a CString, I loose the caracteristics of my text (font type, color, bold, ...).
So, how can I modify this text without loosing the controls characters of my text ?
Thanks in advance.
DD
|
|
|
|
|
My company sells a couple of static libraries. These are non-MFC libraries with a large number of C interfaced funtions (they don't export any C++ objects).
I built a release version today and was amazed to see the size of the .LIB has doubled. I can think of nothing that we've added or changed that could account for this - in fact, I removed most of what we've added, as a test, to see where the bloat was coming from; but the size stayed the same (fat).
Even more interesting, an app built against the new library is the same size as the app built against the old library.
Can anyone think of a way to reduce the static .LIB size? At its new size, it's too fat to distribute (I couldn't afford the extra bandwidth!)
-c
Smaller Animals Software, Inc.
You're the icing - on the cake - on the table - at my wake. Modest Mouse
|
|
|
|
|
|
Turn off incremental linking, no debug info, check optimizations... and all the other neat stuff I could steal from Pietreks "Remove Fatty Deposits from Your Applications Using Our 32-bit Liposuction Tools" MSJ article. Should be in your MSDN.
|
|
|
|
|
Hi all! I am just wondering if some of you can help me. Im designing an mp3 player using MFC and i need a flashy background for it. How do i make the background of the dialog window to appear as a created image that i have done in PSP7.(also, the image that made is not square) Any help would be greatly appreciated.
|
|
|
|
|
It's hardly image manipulation. Save it as a bmp, then use stretchblt to draw it across the window, using GetClientRect to get the size, in WM_ERASEBKGND.
If you want to use a jpg, or something else small, you'll need to read the FAQ for ways of reading them.
Christian
The tragedy of cyberspace - that so much can travel so far, and yet mean so little.
|
|
|
|
|
I am writing a frontend to a database in VC++, and need to access a MicroSoft Access database (.mdb).
The database was created in an older version of Access (97 I belive). However, when I go to convert it to a newer version (2000, or with OfficeXP), and run the program, the program crash's on me.
I am using the CDaoDatabase class, and just using the Open(filelocation) to open it. any ideas?
|
|
|
|
|
What is the line of code that it crashes on?
If you post the problem area of the code, somebody might be able to spot what is wrong?
Is there a good reason you are using DAO? Personally, I find ADO to be a better way of accessing databases.
Michael
|
|
|
|
|
Because the program is based off of one I wrote awhile ago, and DAO is what I knew at the time, is there a benifit to going ADO over DAO?
Either way, I have a class called CTeacherDB, it has the variable
CDaoDatabase m_db;
it is crashing on m_db.Open(sDB); where sDB is the location of the database. (ie: X:\wherever\whatever.mdb)
|
|
|
|
|
Newer versions of the database need DAO Version 3.6
You can get this by installing the latest Microsoft database Access Components (if you haven't already done so) but MFC6 still won't use it. You have to mess around a little to fool it into using the right version. There's a kb article somewhere but the following code might show you enough. (Just translate the pjpRegKey::CRegKey to your own method of registry access.)
bool CDatabaseHandler::DAO36Fix()
{
bool bRet = false;
if (AfxGetModuleState()->m_dwVersion == 0x600)
{
PJPreg::CRegKey regkey(HKEY_CLASSES_ROOT, "CLSID\\{00000100-0000-0010-8000-00AA006D2EA4}\\InprocServer32");
CString csPath;
regkey.GetStringValue("", csPath);
if (!csPath.IsEmpty())
{
if (0 == _access(csPath, 0))
{
AfxGetModuleState()->m_dwVersion = 0x601;
bRet = true;
}
}
}
return bRet;
}
Just call this function once during your app's initialisation before you try to open the db.
Hope this helps...
Phil J Pearson
|
|
|
|
|
Hi,
i'd like to know if it is possible to determine the cpu time given to a process ? (or the percentage of cpu a process consumes ?)
I found a solution under windows NT, but not under 98/Me.
Thanks in advance.
Lion.
|
|
|
|
|
The short answer to this problem is NO. I was recently interested in doing this myself and have concluded this is not possible under win98/Me. Ths API functions work under nt/2k/xp only!!!
If you want the clocks used by the current process thats a little easier, but I wouldn't imagine very accurate...per function is a snap and probably dead on (depending on the method you use).
Inorder to get system wide processor useage I figure you'd have to write a device driver and record start and stop clocks between task switches. This isn't easy.
If you don't require real-time processor useage though...you can use your systems tools (system monnitor) and create a log file. Then load the log into yer app and display and view the data as nessecary.
"An expert is someone who has made all the mistakes in his or her field" - Niels Bohr
|
|
|
|
|
<<if you="" want="" the="" clocks="" used="" by="" current="" process="" thats="" a="" little="" easier...="">>, that could be a good point of start.
with the clocks used by the curent process i could calculate the percentage of the cpu consumed by my process.
Is there a way to know the clocks used by the current process ?
Cheers,
Lion.
|
|
|
|
|
When I said clocks of the current process this was a bit of a misnomer. You can retrieve the clocks used by your own applications process. Not the process with the highest current priority or the process behind the active window.
There are several techniques available each will vary in accuracy.
1) QueryPerformanceCounter() - I have read that this techinque has is not that accurate. However it will run under Win95/NT and up.
2) clock() found in the CRT should lend itself nicely to what you want to do.
3) RTDSC intel ONLY instruction...I would argue that this is probably the most effective at returning an accurate reading of clocks expended. However side effects are...you'd have to record clocks at the start and end of each function calculate the sum and then the difference of total expended clocks to calculate percentage of CPU used by the process. Also...your code will only run on intel machines. And the is a known quirk with the RTDSC instruction that requires you to perform a cache warm-up because the instruction returns a higher count than it should on it's first execution. this can complicate matters a little.
I've never tried using the clock() of the crt, but it sounds like it returns the clocks spent of the current process...if this is true you can avoid cache warmups and recording at the start and end of each function.
Are you trying to profile your code...or just return CPU useage on a system wide basis..at first it sounded like you were trying to profile the system, but if your trying to profile your code...I would suggest going with the RTDSC method...
Cheers!
"An expert is someone who has made all the mistakes in his or her field" - Niels Bohr
|
|
|
|
|
does anyone know where i can find an implementation of the merge sort algorithm in C++.
thanks
|
|
|
|
|
|
The Problem is --Where and How to Delete the created objects with "new" Operator
Please mark the palce and solution..
i tried with somany ways but i am getting "Heap assertion"
and in Debugging mode it is showing MemoryLeak Detected
as follows:
Detected memory leaks!
Dumping objects ->
{172} normal block at 0x002F5F88, 500 bytes long.
Data: 44 3A 5C 50 72 6F 6A 65 63 74 73 5C 44 75 6D 70
and also i am getting the
First-chance exception in MyApp.exe (KERNEL32.DLL): 0x000006B5: (no name).
please give me the solution
I am very much worring about these problems please please....
This is Mycode:
I am declaring structures as follows:
1.For Database entries:
;;;;;;;;;;;;;;;;;;;;;;;
typedef struct{
char strName[MAX_PATH];
int nNumber;
int nCode;
}DB_DATA;
2:For Daily entries:
;;;;;;;;;;;;;;;;;;;;
typedef struct{
char strName[MAX_PATH];
int nNumber;
int nCode;
}DAILY_DATA;
Now i am using CTypedPtrList as follows:
1.For Database:
===============
typedef CTypedPtrList DB_DATA_LIST;
DB_DATA_LIST m_lstDbData;
2.For Initial List:
==================
typedef CTypedPtrList INITIAL_LIST;
INITIAL_LIST m_InitialList;
3.For Priority List:
====================
typedef CTypedPtrList PRIORITY_LIST;
PRIORITY_LIST m_PriorityList;
Initially i am getting all the data from database and store it in "m_lstDbData"
as follows:
############
while (EndOfFile)
{
DB_DATA * dbdata=new DB_DATA;
strcpy(dbdata->sName,rs.sName);
dbdata->nNumber=rs.nNumber;
dbdata->nCode=rs.nCode;
m_lstDbData.AddTail(dbdata);
MoveNext();
}
Preparing the InitialList as follows:
`````````````````````````````````````
Now i am checking the Dialy Register(one Text file contains record wise data) if
Daily Register values mactched with Database values then stored this values into InitialList.
do
{
POSITION nPos=m_lstDbData.GetHeadPosition();
for(int nPass=0;nPass<m_lstdbdata.getcount();++npass)
{
db_data="" *="" tempdbdata="new" db_data;=""
tempdbdata="m_lstDbData.GetAt(nPos);"
if(dialyreg="" ncode="=tempDbdata-">nCode)
{
DAILY_DATA * tempDailyData=new DAILY_DATA;
strcpy(tempDailyData->sFileName,str);
tempDailyData->nNumber=tempDbdata->nNumber;
tempDailyData->nCode=tempDbdata->nCode;
InitialList.AddTail(tempDailyData);
}//end if(DialrRegCode==tempDbdata->nCode)
m_lstDbData.GetNext(nPos);
}//end for(int nPass=0;nPass<m_lstdbdata.getcount();++npass)
}while(endof daily="" reg);="" this="" is="" do="" while="" loop=""
<<<<<<<<<<<<<<<<<<<<<<<<<="">>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Next I am preparing PriorityList according the nCode(assending):
````````````````````````````````````````````````````````````````````
while(!InitialList.IsEmpty())
{
POSITION nPos=InitialList.GetHeadPosition();
DAILY_DATA * TempHeadPosData=new DAILY_DATA;
TempHeadPosData=InitialList.GetAt(nPos);//Head Position Priority
nStuctPos=InitialList.Find(TempHeadPosData);
nHPosCode=TempHeadPosData->nCode;
for(int nIndex=0;nIndex<initiallist.getcount();nindex++)
{
daily_data *="" tempnextposdata="new" daily_data;
tempnextposdata="InitialList.GetNext(nPos);
nNextPosCode=TempNextPosData-">nCode;
if(nHPosCode>nNextPosCode)
{
nStuctPos=InitialList.Find(TempNextPosData);
int nTempHold=nHPosCode;
nHPosCode=nNextPosCode;
nNextPosCode=nHPosCode;
}//end if(nHPosCode>nNextPosCode)
else
{
if(nHPosCode==nNextPosCode)
{
//here i am doing somethine
}//end if(nHPosCode==NextPosPriority)
}//end else
}//end for(int nIndex=0;nIndex<initiallist.getcount();nindex++)
daily_data="" *="" tempnewdata="new" daily_data;
tempnewdata="InitialList.GetAt(nStuctPos);"
prioritylist.addtail(tempnewdata);
initiallist.removeat(nstuctpos);
}="" end="" while(!initiallist.isempty())
finally="" i="" am="" getting="" the="" data="" from="" prioritylist="" and="" send="" it="" to="" mydll(mydll="" do="" update="" database)=""
``````````````````````````````````````````````````````````````````````````````````````````````````
while(!prioritylist.isempty())
{
position="" pos="PriorityList.GetHeadPosition();
DAILY_DATA" filedata="new" daily_data;
filedata="PriorityList.GetAt(Pos);
strTemp.Format("%s",filedata-">szName);
nCode=filedata->nCode;
if(nCode>=1)
{
//call MyDll
PriorityList.RemoveAt(Pos);
}//end if(nCode>=1)
else
{
PriorityList.RemoveAt(Pos);
}
strTempPath=strPath;
}//end while(!PriorityList.IsEmpty())
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Now the Problem is --Where and How to Delete the created objects with "new" Operator
Please mark the palce and solution..
i tried with somany ways but i am getting "Heap assertion"
and in Debugging mode it is showing MemoryLeak Detected
as follows:
Detected memory leaks!
Dumping objects ->
{172} normal block at 0x002F5F88, 500 bytes long.
Data: 44 3A 5C 50 72 6F 6A 65 63 74 73 5C 44 75 6D 70
and also i am getting the
First-chance exception in MyApp.exe (KERNEL32.DLL): 0x000006B5: (no name).
please give me the solution
I am very much worring about these problems please please....
suma k
|
|
|
|
|
Well, here is one memory leak. You have the same bad construct in a few other places.
DB_DATA * tempDbdata=new DB_DATA;
tempDbdata=m_lstDbData.GetAt(nPos);
Why allocate a new record and then do nothing with it?
Tim Smith
I know what you're thinking punk, you're thinking did he spell check this document? Well, to tell you the truth I kinda forgot myself in all this excitement. But being this here's CodeProject, the most powerful forums in the world and would blow your head clean off, you've got to ask yourself one question, Do I feel lucky? Well do ya punk?
|
|
|
|
|
Thanks for your reply
please i am very new c++ coding
In which place i do nothing for newly allocated reocrd?
|
|
|
|
|
For starters, CTypedPtrList ? MFC containers suck in every possible way. Use std::list or std::vector, then you can write functors to do things like delete pointers as you empty the list.
while(!InitialList.IsEmpty())
{
POSITION nPos=InitialList.GetHeadPosition();
DAILY_DATA * TempHeadPosData=new DAILY_DATA;
// You never delete this - why ?
TempHeadPosData=InitialList.GetAt(nPos);//Head Position Priority
nStuctPos=InitialList.Find(TempHeadPosData);
nHPosCode=TempHeadPosData->nCode;
for(int nIndex=0;nIndex{
DAILY_DATA * TempNextPosData=new DAILY_DATA;
// You never delete this - why ?
TempNextPosData=InitialList.GetNext(nPos);
nNextPosCode=TempNextPosData->nCode;
if(nHPosCode>nNextPosCode)
{
nStuctPos=InitialList.Find(TempNextPosData);
int nTempHold=nHPosCode;
nHPosCode=nNextPosCode;
nNextPosCode=nHPosCode;
}//end if(nHPosCode>nNextPosCode)
else
{
if(nHPosCode==nNextPosCode)
{
//here i am doing somethine
}//end if(nHPosCode==NextPosPriority)
}//end else
}//end for(int nIndex=0;nIndex
DAILY_DATA * TempNewData=new DAILY_DATA;
TempNewData=InitialList.GetAt(nStuctPos);
PriorityList.AddTail(TempNewData);
// This one is fine, because it gets put into the list, but it must be deleted in your destructor if not before (unless the MFC container does it for you ).
InitialList.RemoveAt(nStuctPos);
}//end while(!InitialList.IsEmpty())
Christian
The tragedy of cyberspace - that so much can travel so far, and yet mean so little.
|
|
|
|