|
Itellisense keeps track of variables (which involves the creation of some sort of structures to hold at least the variable name and type) and brackets, but I agree it`s all on a very shallow level. I thought storing variable values would be the next logical step. Getting on this track started from me being frustrated with silent errors one gets when accessing an array outside its bounds. You could fix this by adding safety checks around the array in the c++ code but I thought you could also have an Intellisense like system that would spot the error. Evolving it into something that can `understand` classes or other advanced c++ features is an ambitious undertaking indeed I`m not sure I`m aiming that high.
here`s a short video of my program performing some basic operations:
Simulating code execution - YouTube[^]
modified 11-Nov-21 5:03am.
|
|
|
|
|
I'm not sure, excactly, what it is you're trying to accomplish. If you're thinking of creating a full C++ interpreter, then maybe you want to look at the Cling - ROOT project. However, that is a Linux only project, so it probably wont fit your needs. There might be a good C++ interpreter available for windows out there, you'll just have to google for it.
If what you are trying to achieve is more along the lines of code analysis, then maybe clang-tidy is more what you are thinking of, in which case see here: Using Clang-Tidy in Visual Studio | Microsoft Docs
But maybe I've misunderstood what it is you're trying to do. Perhaps the exercise of writing a C++ parser is in itself worth the effort for you, in which case, have at it!
Keep Calm and Carry On
|
|
|
|
|
thanks I`ll take a look at those projects to see if they are a match to what I`m trying to build. Note: I could be misusing the term `interpreter` here, that could be a word that is used to designate a very specific thing in software development.
modified 11-Nov-21 2:01am.
|
|
|
|
|
Interpreter usually means software that executes source code without compiling it.
Depending on what you want to do, the code associated with this article[^] may be useful. To do C++ static analysis, it has to do many of the same things as a C++ compiler. However, it is written in C++, not C#.
|
|
|
|
|
I`m making proper use of the term then. Thanks for the article link Greg
|
|
|
|
|
The code in the article could evolve into a C++ interpreter, but I decided this wouldn't be as useful as enhancing its static analysis capabilities. There are also C++11 language features that it doesn't support, and it doesn't do folding (calculating compile-time constants).
|
|
|
|
|
I`ll probably won`t end-up much further than getting my feet wet but that good to know.
|
|
|
|
|
Yes,
Apparently over at CERN they aren't just doing particle physics. They also do some pretty good software engineering[^], which includes a C++ Interpreter[^] they called Cint.
I don't think Cint is being maintained anymore, they seem to be putting all of their effort into the new Cling[^].
I've never used either one of them, so I don't know much about them.
Best Wishes,
-David Delaune
|
|
|
|
|
Lots of useful resources, thanks.
|
|
|
|
|
Message Closed
modified 15-May-23 19:07pm.
|
|
|
|
|
Rather than system(), you want to use popen(). The only problem is that popen() doesn't supply a separate FILE for stderr, so you have to use output redirection to capture both e.g.
FILE *cmd = popen("hcitool dev 2>&1", "r");
char *buffer = NULL;
size_t len = 0;
ssize_t readlen;
while ( (readlen = getline(&buffer, len, cmd)) > 0)
{
}
free(buffer);
pclose(cmd);
You could perhaps also use output redirection to capture output separately e.g.
FILE *cmd = popen("hcitool dev 2>/tmp/hcierrs", "r");
FILE *cmd_errs = fopen("/tmp/hcierrs", "r");
unlink("/tmp/hcierrs"); If you're going to do that, you might want to look at creating unique temporary file names, so that you don't clobber output if you happen to have more than one instance of the program running at the same time. mkstemp() can help you here.
For the really advanced, you might look into trying "roll your own" version of popen that uses fork() and one of the exec() functions to separate out stdout and stderr to two separate FILES.
Keep Calm and Carry On
|
|
|
|
|
I am using an outlook bar style property sheet with 3 property pages as the main window of my application.I am unable to change the tab icons displayed on the property sheet.Please suggest any strategy to change the icons.I have gone through all the documentation related to property sheets
and also googled but I couldn't get a solution. I have code which is not working and will post it if required.
Deekonda Ramesh
modified 21-Oct-21 3:19am.
|
|
|
|
|
|
SetIconsList works only once before the call to DoModal() on the property sheet. When It called a second time it asserts in afxpropertysheet.cpp : at line ENSURE(m_Icons.GetSafeHandle()==NULL).
Deekonda Ramesh
|
|
|
|
|
In such a case I'd recommend to subclass the CMFCPropertySheet (derive your own class from it) and overload the SetIconsList method. Or better implement the new method (say, ReplaceIcon) that would directly manipulate (remove/add/replace an image) with the m_Icons imagelist.
|
|
|
|
|
I have derived a class from CMFCPropertySheet and I changed m_Icons member with the new bitmaps.It does not show any change in the displayed icons/bitmaps.
Deekonda Ramesh
modified 22-Oct-21 12:38pm.
|
|
|
|
|
Then investigate the afxpropertysheet.cpp (and probably some more (friend and other classes) source code to see where and how the m_Icons imagelist is involved and try to change it according to your needs!
|
|
|
|
|
CMFCPropertySheet has a member called m_wndPane1. Following approach also did not work. Button images are jumbled up
m_wndPane1.RemoveAllButtons();
m_wndPane1.ClearAll();
retval=m_wndPane1.AddButton(m_bmpimgs[0], "Create a Job", 10050, 0);
retval=m_wndPane1.AddButton(m_bmpimgs[1], "Manage a Job", 10051, 1);
retval=m_wndPane1.AddButton(m_bmpimgs[2], "Restore a Job", 10052, 2);
m_wndPane1.InvalidateButton(0);
m_wndPane1.InvalidateButton(1);
m_wndPane1.InvalidateButton(2);
Deekonda Ramesh
|
|
|
|
|
Got the answer mostly due to Microsoft Q&A This code placed in the derived property sheet works if the bitmap images are all of exactly the same size Thanks also to Victor Nijegorodov for his suggestions:
m_wndPane1.RemoveAllButtons();
retval=m_wndPane1.AddButton(m_bmpimgs[0], "Create a Job", 10050, 0);
retval=m_wndPane1.AddButton(m_bmpimgs[1], "Manage a Job", 10051, 1);
retval=m_wndPane1.AddButton(m_bmpimgs[2], "Restore a Job", 10052, 2);
m_wndPane1.InvalidateButton(0);
m_wndPane1.InvalidateButton(1);
m_wndPane1.InvalidateButton(2);
Deekonda Ramesh
|
|
|
|
|
|
I thought it might be faster getting an answer in the discussions.
Deekonda Ramesh
|
|
|
|
|
No, it just means duplicated effort, please use one place only.
|
|
|
|
|
I am trying to load a bit map its in my res folder in fact I have also copied it folder where my .exe is it fail to load
Here is My rc statement
IDB_BITMAP1 BITMAP "res\\bitmap1.bmp"
and I do a CBitmap.LoadBitmap(IDB_BITMAP1); The return code is 0 The Documentations says Quote: by the ID number in nIDResource from the application's executable file.
does that mean I have to link the application a certain way
thanks
|
|
|
|
|
- Are you sure the bitmap IDB_BITMAP1 is really included in your .exe? (try to load the .exe as a resource in VS and proof it).
- Did you try to use LoadImage instead?
- What does the GetLastError return if the loading fails?
|
|
|
|
|
What do you mean 'included in your .exe' I did try the load image and it failed
I am not really sure what you mean by 'try to load the .exe as a resource' does the bitmap have to be linked into the .exe
|
|
|
|