|
|
I don't see the problem. Use the same defined name in all your code, then you do not need to care. If it's not defined then the compiler will complain.
|
|
|
|
|
If I use the same defines both in my local code and in the shared h-file then I get compiler warnings, "REGISTER_NAME" redefined. I need to include the shared h-file in my own project as well because in addition to addresses, it also contains structs and enums that contains information about what the data in the different registers mean. If I get rid of my local file (the comprehensive file with ALL register addresses) then I expose all the registers and I don't want that, I only want to expose a subset. Maybe I should move my structs and enums to a separate shared h-file and ensure that (through special inclusion guards) my local and the shared h-file are never included into the same file, but I would prefer to keep everything (addresses, structs and enums) in the same file.
|
|
|
|
|
You can use #define statements in each source module to include only certain sections of the headers, which is the standard way of doing it. Take a look at any of the Windows header files and you will see examples.
|
|
|
|
|
The registers that should be exposed are not contiguous, they appear quite randomly in the address space. Currently, they are ordered in ascending order of the address and it's too late in the development phase to re-number the addresses according to whether they are exposed or not. So, adding a lot of #ifdefs would pollute the code quite a bit and make it much harder to read. I'm a firm believer in having code that easy to read for the human eye.
|
|
|
|
|
As an alternative, you could automatically generate (e.g. pre-build step) both the correct header and its pretty representation (e.g. human readable file) starting from a sigle configuration file.
I use a similar approach to share constant values in both C and Lua programs.
|
|
|
|
|
Yes, if worse comes to worse I will do this. Is there source code available somewhere for a "preprocessor light" that can automatically detect #defines that are evaluated to numbers?
|
|
|
|
|
Very probably there is, but, unfortunately, I am not aware of. I do use a little Lua script for the purpose. Lua features powerful string manipulation functions and it is a very enjoyable scripting language. You might also use a more popular scripting language, like, for instance, Python (another option is, if you like it, using the C++ 11 regex classes).
|
|
|
|
|
I display the 32 bit icon with transparency using the AlphaBlend function. If the window with the icon is moved partially outside the monitor screen, the transparent area in some places is filled. Damaged places with partial transparency.. Any idea what it might be?
modified 9-Oct-19 13:23pm.
|
|
|
|
|
Member 12661464 wrote: Any idea what it might be? Maybe the Window is not getting refreshed properly. Do you have code that is controlling when the icon gets painted?
|
|
|
|
|
I just put the following code in the OnPaint () handler.
CPaintDC dc(this);
CDC *psrcDC = m_PictureControl.GetDC();
CDC dstDC;
dstDC.CreateCompatibleDC(psrcDC);
HBITMAP oldBmp = (HBITMAP)SelectObject(dstDC.m_hDC, startBitmap);
BLENDFUNCTION blend = { AC_SRC_OVER, 0,255, AC_SRC_ALPHA };
AlphaBlend(psrcDC->m_hDC, 0, 0, iWidth, iHeight, dstDC.m_hDC,0, 0, iWidth, iHeight, blend);
DeleteObject(oldBmp);
DeleteObject(startBitmap);
ReleaseDC(psrcDC);
|
|
|
|
|
Sorry, I cannot see anything obvious. Also, I am afraid I don't use MFC, so cannot try a similar test.
|
|
|
|
|
I want to create a macro that is fully executed at compile time (not runtime). If two values are both defined, then I want to check if they are equal. If at least one of them is not defined, then nothing should happen. I have come halfway, the following works great:
#define VALIDATE_ADDR(ADDR1,ADDR2) _Static_assert(ADDR1 == ADDR2, #ADDR1 " is not equal to " #ADDR2); However, when I try to nest that macro into another macro, then I run into trouble:
#define VALIDATE_ADDR_IF_THEY_BOTH_EXIST(ADDR1,ADDR2) \
#if defined(ADDR1) && defined(ADDR2) \
VALIDATE_ADDR(ADDR1, ADDR2) \
#endif Can someone please help me so I can do checks like this:
#define MY_ADDR_1 (1)
#define MY_ADDR_2 (2)
#define MY_ADDR_3 (3)
#ifdef MY_ADDR_4
#undef MY_ADDR_4
#endif
VALIDATE_ADDR_IF_THEY_BOTH_EXIST(MY_ADDR_1, MY_ADDR_2); VALIDATE_ADDR_IF_THEY_BOTH_EXIST(MY_ADDR_3, MY_ADDR_4);
|
|
|
|
|
AFAIK, that's not possible, since the # token is reserved for stringifying macro parameters within the macro expansion.
Also, I see that your definition for VALIDATE_ADDR ends in a semicolon. In general, you do not want to end a macro with a semicolon, since this can lead to, in the best case, a compiler error, and in the worst case, a subtle and hard to find bug.
|
|
|
|
|
Macros are purely compile time. If you want runtime checks then use functions. Macros such as the above tend to be more trouble than they are worth.
|
|
|
|
|
What do you mean? I've clearly stated I want compile time execution, not runtime execution of this macro. Are you thinking of the _Static_assert function? It is executed at compile time, I think it's a feature built into the gcc compiler.
|
|
|
|
|
Sorry I misread the question. I have tried a number of variants but cannot get it to work. it would appear that #define statements are not accepted inside a macro definition.
|
|
|
|
|
Btw, I don't need the VALIDATE_ADDR macro for anything, it's perfectly fine to replace it with the _Static_assert directly, if that makes anything easier.
|
|
|
|
|
I have some hard coded strings which I wanted to add to the String Table and load that string from the string table.
From the resource view, i go to the string table and gave ID,value and caption there.
and tries to load by doing this.
CString temp;
temp.LoadString(IDS_STRING1);
But its giving me IDS_STRING1 is undefined. What is the correct way to do this?
Thanks in advance.
|
|
|
|
|
I found what I did wrong. Thanks
|
|
|
|
|
what was wrong ? how did you fix it ?
I'd rather be phishing!
|
|
|
|
|
I gave the value which is already there.. I gave a different number which is not already used and that solve my problem.
|
|
|
|
|
How to implement singleton design pattern for database connection in MFC vc++?.
|
|
|
|
|
|
I have created like this. Am I going in the right direction?
Thanks in advance.
#include <afxdb.h>
#pragma once
class DatabaseSingleton : public CDatabase
{
static DatabaseSingleton* _instance;
DatabaseSingleton();
public:
static DatabaseSingleton* GetInstance();
virtual ~DatabaseSingleton();
private:
CString DSN;
CString UID;
CString PWD;
CString ConnectionString;
};
#include "stdafx.h"
#include "Medication_Administration.h"
#include "DatabaseSingleton.h"
DatabaseSingleton::DatabaseSingleton():DSN(_T("DemoDB")),UID(_T("root")),PWD(_T("root"))
{
ConnectionString.Format(_T("DSN=%s;UID=%s;PWD=%s"), DSN, UID, PWD);
OpenEx(ConnectionString);
}
DatabaseSingleton::~DatabaseSingleton()
{
Close();
}
DatabaseSingleton* DatabaseSingleton::GetInstance()
{
if (_instance == NULL)
{
_instance = new DatabaseSingleton();
}
return _instance;
}
|
|
|
|