|
Yeah, but sometimes, you got to stay platform-independant while still working in Visual Products (though that kinda limits you to C++).
For starters: I got MS VC++ 2005 Express. I use it to develop a OpenSource-Qt freeware tool.
If I have Qt-questions, I AM gonna ask them in a Qt-Forum, but if I am stuck with VS-Problems or Standard-C++ issues, I'd rather ask on CodeProject.
|
|
|
|
|
Sebastian Schneider wrote: if I am stuck with VS-Problems or Standard-C++ issues, I'd rather ask on CodeProject
yeah... that's what the Visual C++ forum is for...
C++/CLI forum is for managed C++ (you know, thet stufs for the .NET framework....)
TOXCCT >>> GEII power [toxcct][VisualCalc 2.20][VCalc 3.0 soon...]
|
|
|
|
|
Hi All,
Can anyone tell me where is the memory allocated for a function?. Consider the following example
class A
{
int a;
int b;
void f1();
};
void main()
{
A obj1;
}
Now, in this case, assume that for variable 'a' the address would be 5000 and for 'b' it would be 5004. These 2 varialbes are present in the stack. Now, where does my function lie. Is it placed in the stack? or somewhere else. How do I find the address of the function and know as where it is placed?
can anyone help me on this.
|
|
|
|
|
The code for functions is in the executable, there isn't a separate copy for each instance of a class.
You can get the address of a function like this:
void (A::*pfn)() = A::f1; // or &A::f1 in newer compilers
--Mike--
Visual C++ MVP
LINKS~! Ericahist | NEW!! PimpFish | CP SearchBar v3.0 | C++ Forum FAQ
|
|
|
|
|
Hi Mike,
Just as a follow on question, you say that there isn't a separate copy for each instance of the class. From my limited understanding of such things, when you create a new instance the run-time creates a new bit of memory to store the class variables. I thought under this it also creates a new code segment for that object. Am I wrong?
Also if there is only one code segment per class, what happens when you have two threads that access two different objects, surely you would have a confict of accessing the same code at the same time?
regards,
Rich
"Programming today is a race between software engineers striving to build bigger and
better idiot-proof programs, and the Universe trying to produce bigger and better idiots.
So far the Universe is winning." -- Rich Cook
|
|
|
|
|
No, code is not created on the stack. The code is already in the executable.
Multiple threads can run the same code simultaneously, all the CPUs are doing is reading memory and executing the instructions they find. The code itself can do non-thread-safe things, but that's a separate issue.
--Mike--
Visual C++ MVP
LINKS~! Ericahist | NEW!! PimpFish | CP SearchBar v3.0 | C++ Forum FAQ
|
|
|
|
|
I am not 100% sure, but I believe that the compiler will create a "structure" in the stack, which contains a, b and pointer to the function. The actual function code is in the "instruction set" section of the executable. In general, the class maps into something like this in the stack:
<this> points to a structure which contains the following entries:
[0] Pointer to the virtual function table
[1] First variable
[2] Second variable
...
[N] Pointer to the first non-virtual function
[N+1] Pointer to the second non-virtual function
...
Pointer to the virtual function table points to the structure of pointers to individual virtual functions.
This binary structure of the class is undocumented because it allows you to access private class members through <this> pointer, thus, violating incapsulation. There is also an issue with data alignment of variables a, b, ... when you try to read variables a, b, etc using pointer <this>. There is no problem if they have the same type, that is the same memory size. Otherwise the alignment freaks out depending on the order of integers, doubles, strings etc in which you declared those in the class. I hope this helps.
|
|
|
|
|
Is C++/CLI faster than C#, or do they both convert to the same intermediate code to be run by the .net framework?
|
|
|
|
|
While all CLI compilers generate MSIL, the C++ compiler generates optimized MSIL in some cases (something that none of the other managed languages do). How effective this will be depends on whether the IL optimizations result in improved JITing.
And you can always speed up specific blocks of code by cheating and using #pragma unmanaged
Regards,
Nish
-- modified at 20:16 Monday 13th February, 2006
|
|
|
|
|
Thanks.
I have been thinking about writing a C++/CLI library for some of the spherical trigonometry functions in my planetarium program to speed it up.
|
|
|
|
|
Hi guys!
I want to learn how to create a windows window (instead of the boring DOS prompt) so I have searched and found code for doing this.
However, I get these error messages:
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 200 Borland window.cpp:
Warning W8057 window.cpp 50: Parameter 'hPrevInstance' is never used in function __stdcall Winmain(HINSTANCE__ *,HINSTANCE__ *,char *,int)
Warning W8057 windwo.cpp 50: Parameter 'szCmdLine' is never used in function __stdcall WinMain(HINSTANCE__ *,HINSTANCE__ *,char *,int)
Turbo Incremental Link 5.00 Copyright (c) 1997, 200 Borland
Error: Unresolved external '_main' referenced from C:\BORLAND\BCC55\LIB\COX32.OBJ
The code I found that's supposed to create a windows window is the following:
window.cpp:
#include <windows.h>
#include "Resource.h"
LRESULT CALLBACK WndProc( HWND hWindow, UINT msg, WPARAM wParam, LPARAM lParam );
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow )
{
static TCHAR szAppName[] = TEXT( "TestApp" );
WNDCLASSEX wndclass;
HWND hWindow;
MSG msg;
wndclass.cbSize = sizeof( wndclass );
wndclass.style = CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc = WndProc;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hInstance = hInstance;
wndclass.hIcon = LoadIcon( hInstance, MAKEINTRESOURCE( IDI_APPICON ) );
wndclass.hIconSm = LoadIcon( hInstance, MAKEINTRESOURCE( IDI_APPICON_SM ) );
wndclass.hCursor = LoadCursor( NULL, IDC_ARROW );
wndclass.hbrBackground = ( HBRUSH ) ( COLOR_WINDOW + 1 );
wndclass.lpszMenuName = NULL;
wndclass.lpszClassName = szAppName;
if( ! RegisterClassEx( & wndclass ) )
return 0;
hWindow = CreateWindow( szAppName, szAppName, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 640, 480, NULL, NULL, hInstance, NULL );
ShowWindow( hWindow, iCmdShow );
UpdateWindow( hWindow );
while( GetMessage( & msg, NULL, 0, 0 ) )
{
TranslateMessage( & msg );
DispatchMessage( & msg );
}
return ( int ) msg.wParam;
}
LRESULT CALLBACK WndProc( HWND hWindow, UINT msg, WPARAM wParam, LPARAM lParam )
{
HDC hDC;
PAINTSTRUCT ps;
RECT rect;
switch( msg )
{
case WM_PAINT:
hDC = BeginPaint( hWindow, & ps );
GetClientRect( hWindow, & rect );
DrawText( hDC, TEXT( "This is some text, just for fun!" ), -1, & rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER );
EndPaint( hWindow, & ps );
return 0;
case WM_DESTROY:
PostQuitMessage( 0 );
return 0;
}
return DefWindowProc( hWindow, msg, wParam, lParam );
}
Resource.h:
#define IDI_APPICON 1000
#define IDI_APPICON_SM 1001
Recourse.rc:
#include "Resource.h"
IDI_APPICON ICON "path/to/appicon.ico"
IDI_APPICON_SM ICON "path/to/small_appicon.ico"
Can anyone help me with this?
Thanks!
Peter
|
|
|
|
|
I don't use Borland, but it looks like you need to change your entry point from "main" to "WinMain".
In visual studio, it's set under project properties->linker->advanced->entry point
or with the following command line:
/ENTRY:"main"
|
|
|
|
|
I'm working in C++ Builder and I have a round LED image that I would like to use. However Builder does not seem to accept transparent sections of the graphic and so the image appears as though it has white corners. Any thoughts on how I could get this to display as an image with a transparent background? I tried loading the image through imagelist and then set the transparent property to the white section and this worked except that the graphic then did not look like the nice quality that it use to? Any thoughts would be greatfull.
Debs*
|
|
|
|
|
if you are using a TImage just set the Transparent property to true
|
|
|
|
|
When I set TImage Transparent property to true. The part of the image that becomes transparent is not a clean cut and looks very pixelly. I believe I have to use bmp image for this transparent property to work and even with a high quality bmp I can't seem to get it to be clean transparent cut. Any other thoughts?
Deborah
|
|
|
|
|
That's one of the reasons I'm gradually moving from C++Builder to C++/CLI. I couldn't find any free controls (at least for BCB 5) that would give me proper alpha transparency.
|
|
|
|
|
Excuss my ignorance but what is C++/CLI? How are you finding the transition?? Do you have a link to more info on C++/CLI?
|
|
|
|
|
It always amazes me how people will post messages to a forum without even bothering to see which forum they're posting in! (That's a hint: you posted your original message here in the C++/CLI forum.)
I guess people just see the first three letters of the forum's name and don't bother to read the rest (I wish CP had a smiley that was less intense than , but more intense than . Maybe a little guy looking annoyed with a bit of steam coming out of his ears.)
Anyway, now that I've had my rant -- C++/CLI is Microsoft's slightly-modified version of C++ that works with their .NET framework. Here's a good introductory article: http://www.codeproject.com/managedcpp/cppcliintro01.asp[^]
|
|
|
|
|
Hi all,
i want to share data (variables defiend in dll) with my application. For this we need to use, declspec(dllimport)and declspec(dllexport) keywords.
Is there any other simple way to use the variables defined in dll.
Alternatively, if I want to to the same other than on Windows, what should i do to achieve this?
Also, can dll share variables define in my application?
Regards,
Sapan
|
|
|
|
|
ok I have made a program that simulates a petrol station (comming of cars etc..)
it is a single MFC /SDI app in witch I made 2 functions first one delets the screen and the second one draws someting on the screen. I call this functions whit a timer (every 100ms)
but there is a problem sometimes my program crashes and this is all that I get as help why it crashed
Unhandled exception at 0x7c28af6a (mfc71d.dll) in seminarska.exe: 0xC0000005: Access violation reading location 0x00000004.
So I'm sure that the problem is in this 2 functions :
becouse if I run the program whit no drawing the program never crashes:
ok here is the code for deleteing the screen:
void CseminarskaView::brisi_ekran(void)
{
CDC*tabla=GetDC();
RECT Okno;
GetClientRect(&Okno);
CBrush copic(0xffffff);
tabla->FillRect(&Okno,&copic);
}
and the code for drawing :
void CseminarskaView::risi(Bencinska postaja[])
{
//tukaj moram risati sproti
CDC* tabla=GetDC();
RECT ena;
ena.top=20;
ena.left=20;
ena.right=60;
ena.bottom=60;
int x1=0;
int x2=0;
int x3=255;
int y=25;
CString nizi;
int i ;
for (i=0;i<5;i++)
{
CString out;
out.Format("%i",i+1);
tabla->TextOut(10,y,out);
CBrush pisalo(RGB(x1,x2,x3));
tabla->FillRect(&ena,&pisalo);
ena.top=ena.top+60;
ena.bottom=ena.bottom+60;
x1=x1+60;
x2=x2+60;
x3=x3-60;
y=y+60;
//delete pisalo;
}
CString uu;
y=25;int y1=500;
for( i=0;i<5;i++)
{
for(int j=0;j<postaja[i].dolzina_vrste;j++)
{="" nizi="nizi+"" i="" ";
="" }
="" tabla-="">TextOut(80,y,nizi);
y=y+60;
nizi=" ";
uu.Format("postaja %i: %f",i,postaja[i].rezervar);
tabla->TextOut(10,y1,uu);
y1=y1+20;
}
}
can someone please help me ?
I think that the problem is CBrush but I'm not sure
becouse sometimes the program finishes Ok sometimes not
///---there is no hope for you---\\\
|
|
|
|
|
I am trying to output to the console and trying to center words on the screen. I realize that I cold assume 80 characters can be displayed across - its pretty much the absolute standard these days - but I was wondering if anyone knows a function to get the character width of the console output so that I can use that to be a little more universal in my centering function. Anyone know?
sincerely, Brett Peirce - PolerBear
To err is human; To forgive: divine.
|
|
|
|
|
Use System::Console:
int height = Console::WindowHeight;
int width = Console::WindowWidth;
Console::SetCursorPosition(5, 10);
Console::WriteLine("{0} {1}", height, width);
|
|
|
|
|
How to scroll text in dev c++ in c++ code?
please help me....I'm a computer science student....i really nedded for my project...
nayez dale
|
|
|
|
|
Be more explicit. What text, what kind of application are you using, where is the text displayed...
|
|
|
|
|
Anywhere... as long as the text will scroll. can u help me how to do that...??? I really needed in my project this comming finals....please...
nayez dale
|
|
|
|
|