|
Andre Buenger wrote: You should read this article.
Yeah, that's what I said in my first post. Alignment is not portable by definition.
Andre Buenger wrote: If I now write 200 read and write functions that takes care of the alignment I end with 5000 unmaintainable error prone lines of code
Yeah that does not sound fun. It seems parallel to "data transformation". Rather than write 200 functions you could use a mapping mechanism that would allow you to have a generalized routine to perform the serialization given an address and a "map". You would have a "map" instance for each structure defining the structure layout. The address of the structure instance and the associated map is used to perform serialization.
led mike
|
|
|
|
|
The most elegant solution would be to use a custom compiler, which is used to generate reader+writer functions for each of your structures.
i.e. you define your structures in a separate file:
/* core_types.h */
struct TestStruct
{
char first;
short second;
};
your project has a separate build-step which compiles core_types.h and results in:
void write_struct_TestStruct(struct TestStruct *tptr)
{
write(serial_device, tptr->first);
write(serial_device, tptr->second);
}
...and similar routines for all other types you define. Its sorta like an IDL compiler (i.e. MIDL.EXE for Windows) but designed to target your serial device instead of RPC. The idea is, all of the code to write structures is created automatically from your structure definitions so you don't have to write+maintain it by hand. Your structures stay as 'pure C' for portability.
Lots of tools are available to help you build compilers like this, google for 'lexx', 'antlr' etc. All you need is to parse a subset of 'C' - just C declarations. Maybe even the UNIX 'cdecl' program would be a good starting point.
James
|
|
|
|
|
I'm trying to better visualise my class in the Debugger. I noticed that in VS2005 a new/great feature was introduced to help visualise containers (STL and ATL) in debugger. By this it is easy/fast to display important data from complex classes.
Unfortunately, I can't visualise one stuff. I have a class B with a member variable A* m_ptr. If I edit the autoexp.dat file \ [AutoExpand] section "B=ptr=< m_ptr, t >" then the magic "t" make sure that if the m_ptr is an instance of class C which is derived from class A the debugger displays it as ptr=[C]. This is great so far.
However I would like to do similar thing in [Visualizer] section:
A{<br />
preview<br />
(<br />
#( $e.m_ptr )<br />
)<br />
)
Since there are no official documentation for the syntax I don't know how to put the magic "t" to the preview section so the debugger will display the real instnace of the member pointer. Currently it just displays the pointer address
Any idea how to do this? Or any documentation?
Many thanx,
Abyss
-- modified at 13:52 Friday 6th October, 2006
|
|
|
|
|
Hi all, thank in advance for your help.
I have a modeless dialog box in my form view and i'd like to color the border (the default color i black and thin), i'd like to have more thick and different color. Anyone know how to do this?
Thanks Teo
|
|
|
|
|
Did you search on codeproject I think I saw examples on codeproject?
|
|
|
|
|
Is it possible to uninstall SV2003 SP1? I'm getting an internal compiler error now on some of my projects causing the build to fail.
Todd Smith
|
|
|
|
|
Todd Smith wrote: Is it possible to uninstall SV2003 SP1?
Only if it's listed as a separate product in the Add/Remove Programs applet. Otherwise, you'll need to uninstall all of VS, which would include the SP, and then install VS from scratch.
"Approved Workmen Are Not Ashamed" - 2 Timothy 2:15
"Judge not by the eye but by the heart." - Native American Proverb
|
|
|
|
|
I've looked and don't see a specific item in Add/Remove so I was checking here before I went through the horrible task of reinstalling VS2003. Maybe, hopefully, I missed it in add/remove.
Todd Smith
|
|
|
|
|
Hello everyone!
I have developed an SDI application with MFC, not supporting doc/view, then i made some modification to convert it to MDI, and everything works fine.
Now the weird:
My boss asked to make some trick so that someone could decide in RUNTIME to run the SDI or the MDI version. My first idea was to create 2 classes, CMainFrameSDI->CFrameWnd and CMainFrameMDI->CMDIFrameWnd and instantiate them into the global CApp, taking care to avoid the inizialisations not needed by the MDI and vice versa.
One other thing i did was creating a pure abstract class, CMainFrame, with only methods and only public functions, and deriving both CMainFrameSDI and CMainFrameMDI EVEN from it.
Inside the application the class used is then a pointer to CMainFrame and in case of specific functions it becomes its SDI or MDI version, depending on a flag present in all the three classes.
Everything explode suddenly....
I tried to build a sample with all this stuff but everything explode apparently without any cause into the LoadFrame. The only thing that i can notice is at a certain point unexpectedly the m_hWnd member of the SDI/MDI (depending on what started) become null...
I know i am doing bad things... but someone every did something like this just to take some advice on how to do such thing?
If u need i can provide my sample to give it a check
Best regards &cheers to everyone
A bleeding programmer with a big headache!!!
-Yes, i don't write a good english-
Unlukily it's not a Joke...
Hope you'll understand!!
|
|
|
|
|
It sounds like you have a "production" application. If so I suggest you start a new research project that you use to solve this "new requirement" in isolation from your working application. Once you have an understanding of the problem and the potential solution(s), you can attempt to modify the existing application to implement the solution.
led mike
|
|
|
|
|
|
Is the resource ID valid when you call LoadFrame?
Do you need to be able to switch back and forth between MDI and SDI or just decide at startup?
If just at startup, you should be able to do this in InitInstance() of the app:
CFrameWnd *pFrameWnd = 0;
if (fUserWantsMDI)
pFrameWnd = new CMainFrameMDI;
else
pFrameWnd = new CMainFrameSDI;
if (!pFrameWnd)
return FALSE;
m_pMainWnd = pFrameWnd;
if (!pFrameWnd->LoadFrame(IDR_MAINFRAME))
return FALSE;
|
|
|
|
|
Mark Salsbery wrote: Do you need to be able to switch back and forth between MDI and SDI or just decide at startup?
I based my post on the subject, "Runtime change MDI/SDI" being accurate. Perhaps that was a mistake.
led mike
|
|
|
|
|
Dammit!
|
|
|
|
|
Endaroza wrote: CMainFrameSDI->CFrameWnd and CMainFrameMDI->CMDIFrameWnd
Why not make your derived class a template?
|
|
|
|
|
If you are not supporting the Doc/View architecture then this should be pretty easy. Create your app as an MDI app. When using MDI you show your "view" in MDIChildWnd frames. When using SDI show your view in a subclassed MDIClient window.
You may be right
I may be crazy
-- Billy Joel --
Within you lies the power for good - Use it!
|
|
|
|
|
Solved finally (sorry for the sooooo late answers but i changed the email and i did not received these stuffs) anyway. The solution i found is to take my existing CFrameWnd derived class (CMainFrame), then i created a CMDIFrameWnd derived class (CMDIMainFrame). I moved all the variables inside another class, friend of the two above (CMainFrameVars), and added all the getters/setters to CMainFrame. At this point my old CMainFrame has not one single class variable, and access these variables (even internally) only through the getter/setter functions.
I barely copied all the methods declarations from CMainFrame to CMDIMainFrame header, and vice cersa, now the two classes has exactly the same functions declarations.
After this step i modified the CMDIMainFrame cpp: now it's EMPTY it contains only #include "MainFrm.cpp", #define CMainFrame CMDIMainFrame, #define CFrameWnd CMDIFrameWnd.
Now i have 2 separate classes, exactly the same code, the only difference is inside the header!!
-Yes, i don't write a good english-
Unlukily it's not a Joke...
Hope you'll understand!!
|
|
|
|
|
Would anyone know how to do this, or have any pointers on it:
using getpixel read a pixel on the screen, then do if 3<g<255
so="" basicly="" if="" a="" pixel="" contains="" hint="" of="" green="" execute="" some="" code?=""
thanks
="" johannes=""
<div="" class="ForumSig">/Johannes
|
|
|
|
|
if (GetGValue(GetPixel(hdc, xpos, ypos)) > 0)
{
execute some code
}
|
|
|
|
|
whats the hdc bit?
thanks
/Johannes
|
|
|
|
|
Handle to a device context for the screen.
HDC hdc = GetDC(0);
You asked about reading a pixel from the screen, yes?
Mark
|
|
|
|
|
Or you can use GetGValue(GetPixel(GetDC()->m_hDC,x,y));
|
|
|
|
|
>>Or you can use GetGValue(GetPixel(GetDC()->m_hDC,x,y));
But that's a window pixel, not a SCREEN pixel lol
|
|
|
|
|
I have tried to rotate an image using GDI+ but I have trouble understanding how to do it. Some examples describe calling TranslateTransform() before calling RotateTransform(). The MSDN files are not clear on this. I do all the drawing in a CView from OnDraw().
I would really appreciate clarification on this.
Thanks!
"Eat till you're sleepy, sleep till you're hungry." - Mark
|
|
|
|
|
Disclaimer : I hate it when I cannot put into "good" words what I'm trying to explain.
Me think, you need to translate to the origin, otherwise, the image will be rotated around the origin, and if it's not it will be what you expect the rotation to be.
or, the image will not be rotated against its center point like you expect.
|
|
|
|