|
Ric Ashton wrote: Sorry its not a C++ question.
You are indeed correct.
|
|
|
|
|
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
C is my preferred programming language. I know it is not the expected answer, but since you're our fan...
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
The first 2 books didn't address these issues and the third book assumes the reader has the following knowledge, so I turn to codeproject for the answers, google came up with mixed results for some of the following, so I was hoping a community with experience could sum it up nicely instead of working through google more then what I have,
What exactly are the following datatypes
1. Handle
2. PVOID
3. DWORD
Also, a general question, why use pointers (*) if you can use Addresses (&) to reference objects?
|
|
|
|
|
1,2 and 3 are not C++ types. They are code defined types so you should be able to go to the definition using the IDE tools you are working with.
The general rule I go by is to only use pointers when absolutely necessary. Mostly this translates to when it has been determined that using the heap is required. Also translates to when a reference type will not satisfy the requirements.
|
|
|
|
|
Handle : Handle to an object. It may point to any object. For example a Handle to a window.
PVOID is nothing but a void*. "P" means a pointer.
DWORD is 32 bit unsigned integer.
EliottA wrote: Also, a general question, why use pointers (*) if you can use Addresses (&) to reference objects?
The general answer is , if you can use & do not use *. Moreoever you can send * as *&.
He never answers anyone who replies to him. I've taken to calling him a retard, which is not fair to retards everywhere.-Christian Graus
|
|
|
|
|
You need to buy the complete reference book.
Something like the 'The Waite Group's' Turbo C++ Bible, or
something more up-to-date.
Utilising DWORD (for example) is a complex issue reserved for
programmers with some experience.
To find out what it is used for and how it is used you might
involve yourself with the complex issue of 'sound' and search
the internet for applicable code in this area.
I think this is why nobody had yet replied.
|
|
|
|
|
EliottA wrote: What exactly are the following datatypes
1. Handle
2. PVOID
3. DWORD
See here.
EliottA wrote: Also, a general question, why use pointers (*) if you can use Addresses (&) to reference objects?
See here.
"Old age is like a bank account. You withdraw later in life what you have deposited along the way." - Unknown
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
|
|
|
|
|
|
My app allows users to start a 'helper' applet that runs independently. I am using a mutex to limit this applet to a single instance. I use the mutex both to prevent starting the second instance from my app (by CreateProcess or ShellExecute)AND to have any second instance started outside my (by clicking icons, etc) to self-terminate.
How can I have them switch to the current instance of the applet? That is, if they select to run the applet from my app I don't want to ignore it or display a message that an instance is running. I want to make that instance be get focus and be the top most application.
Thanks,
-G
modified on Wednesday, March 4, 2009 1:39 PM
|
|
|
|
|
Is there some reason you bolded your entire post? I'm so distracted by it I can't even read the post.
|
|
|
|
|
Exactly. That's really harmful to the eyes.
He never answers anyone who replies to him. I've taken to calling him a retard, which is not fair to retards everywhere.-Christian Graus
|
|
|
|
|
Not intentionally.
That is how the post came up when I started it. I thought the preview just came that way. Reviewing it, I see that there as indeed a bold tag around it all, which I have since removed (I hope)
Sorry.
-G
|
|
|
|
|
negativeG wrote: I want to make that instance be get focus and be the top most application.
SetWindowPos()[^]
|
|
|
|
|
Sure, but how do I find the hWnd for the Applet (it is a dialog based) from my App?
There is some recourse if I start the Applet from my App using CreateProcess, but if it is run from the command line, my app has no knowledge of it.
-G
|
|
|
|
|
negativeG wrote: Sure, but how do I find the hWnd for the Applet (it is a dialog based) from my App?
Ah, a new question. Sorry I mistook you for someone that had a clue about what they were doing.
Good luck.
|
|
|
|
|
negativeG wrote: I want to make that instance be get focus and be the top most application.
See the InitInstance() method in this example.
"Old age is like a bank account. You withdraw later in life what you have deposited along the way." - Unknown
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
|
|
|
|
|
Thanks!
I had to massage it a little since I have a Dialog based app, but it is working great now!
-G
|
|
|
|
|
|
If you're using Visual Studio 2003 or later, it might be easier to use CImage[^], as that has built-in 'save as jpeg' functionality?
alexhalt wrote: But at this line
(void)jpeg_write_scanlines( &cinfo,
jsmpArray,
cinfo.image_height );
I've got the following error
Improper call to jpeg library in state 100
Looking at the code for libjpeg, 100 is the 'initialisation' state. This error would be raised by jpeg_write_scanlines if you hadn't called jpeg_start_compress.
Java, Basic, who cares - it's all a bunch of tree-hugging hippy cr*p
|
|
|
|
|
Stuart Dootson wrote: If you're using Visual Studio 2003 or later, it might be easier to use CImage[^], as that has built-in 'save as jpeg' functionality?
I use C, not C++.
Stuart Dootson wrote:
Looking at the code for libjpeg, 100 is the 'initialisation' state. This error would be raised by jpeg_write_scanlines if you hadn't called jpeg_start_compress.
Thanks! Now I get a better error
bRet = OpenClipboard( hwndWindow );
uFormat = CountClipboardFormats();
hClipboardData = GetClipboardData( CF_BITMAP );
hDib = DDBToDIB( ( HBITMAP )hClipboardData, BI_RGB, NULL );
lpbi = ( LPBITMAPINFOHEADER )hDib;
{
struct jpeg_compress_struct cinfo;
struct jpeg_error_mgr jerr;
FILE * outfile;
char filename[] = "out.jpg";
cinfo.err = jpeg_std_error(&jerr);
jpeg_create_compress(&cinfo);
if ((outfile = fopen(filename, "wb")) == NULL) {
fprintf(stderr, "can't open %s\n", filename);
exit(1);
}
jpeg_stdio_dest(&cinfo, outfile);
cinfo.image_width = lpbi->biWidth;
cinfo.image_height = lpbi->biHeight;
cinfo.input_components = 3;
cinfo.in_color_space = JCS_RGB;
jpeg_set_defaults(&cinfo);
{
JSAMPARRAY jsmpArray;
jsmpArray = (*cinfo.mem->alloc_sarray)
((j_common_ptr) &cinfo,
JPOOL_IMAGE,
cinfo.image_width * cinfo.input_components,
cinfo.image_height);
DibToSamps( hDib, cinfo.image_width * cinfo.input_components, cinfo, jsmpArray );
jpeg_start_compress(&cinfo,TRUE);
(void)jpeg_write_scanlines( &cinfo,
jsmpArray,
cinfo.image_height );
Where DibToSamps() function is like here http://www.codeguru.com/cpp/g-m/bitmap/otherformats/print.php/c1731[^]
and DDBToDIB is like follows
HANDLE DDBToDIB( HBITMAP bitmap, DWORD dwCompression, HPALETTE pPal )
{
BITMAP bm;
BITMAPINFOHEADER bi;
LPBITMAPINFOHEADER lpbi;
DWORD dwLen;
HANDLE hDIB;
HANDLE handle;
HDC hDC;
HPALETTE hPal;
int nColors = 0;
BOOL bGotBits;
if( dwCompression == BI_BITFIELDS )
return NULL;
hPal = (HPALETTE) pPal;
if (hPal==NULL)
hPal = (HPALETTE) GetStockObject(DEFAULT_PALETTE);
GetObject(bitmap,sizeof(bm),(LPSTR)&bm);
bi.biSize = sizeof(BITMAPINFOHEADER);
bi.biWidth = bm.bmWidth;
bi.biHeight = bm.bmHeight;
bi.biPlanes = 1;
bi.biBitCount = bm.bmPlanes * bm.bmBitsPixel;
bi.biCompression = dwCompression;
bi.biSizeImage = 0;
bi.biXPelsPerMeter = 0;
bi.biYPelsPerMeter = 0;
bi.biClrUsed = 0;
bi.biClrImportant = 0;
nColors = (1 << bi.biBitCount);
if( nColors > 256 )
nColors = 0;
dwLen = bi.biSize + nColors * sizeof(RGBQUAD);
hDC = GetDC(NULL);
hPal = SelectPalette(hDC,hPal,FALSE);
RealizePalette(hDC);
hDIB = GlobalAlloc(GMEM_FIXED,dwLen);
if (!hDIB)
{
SelectPalette(hDC,hPal,FALSE);
ReleaseDC(NULL,hDC);
return NULL;
}
lpbi = (LPBITMAPINFOHEADER)hDIB;
*lpbi = bi;
GetDIBits(hDC, (HBITMAP)bitmap, 0L, (DWORD)bi.biHeight,
(LPBYTE)NULL, (LPBITMAPINFO)lpbi, (DWORD)DIB_RGB_COLORS);
bi = *lpbi;
if (bi.biSizeImage == 0)
{
bi.biSizeImage = ((((bi.biWidth * bi.biBitCount) + 31) & ~31) / 8)
* bi.biHeight;
if (dwCompression != BI_RGB)
bi.biSizeImage = (bi.biSizeImage * 3) / 2;
}
dwLen += bi.biSizeImage;
if (handle = GlobalReAlloc(hDIB, dwLen, GMEM_MOVEABLE))
{
hDIB = handle;
}
else
{
GlobalFree(hDIB);
SelectPalette(hDC,hPal,FALSE);
ReleaseDC(NULL,hDC);
return NULL;
}
lpbi = (LPBITMAPINFOHEADER)hDIB;
bGotBits = GetDIBits( hDC, bitmap,
0L,
(DWORD)bi.biHeight,
(LPBYTE)lpbi
+ (bi.biSize + nColors * sizeof(RGBQUAD)),
(LPBITMAPINFO)lpbi,
(DWORD)DIB_RGB_COLORS);
if( !bGotBits )
{
GlobalFree(hDIB);
SelectPalette(hDC,hPal,FALSE);
ReleaseDC(NULL,hDC);
return NULL;
}
SelectPalette(hDC,hPal,FALSE);
ReleaseDC(NULL,hDC);
return hDIB;
}
At the bottom line of the code :
(void)jpeg_write_scanlines( &cinfo,
jsmpArray,
cinfo.image_height );
appears some ACCESS VIOLATION at address 0x10.
In the code I followed the manual, which says
Allocate and initialize a JPEG compression object
Specify the destination for the compressed data (eg, a file)
Set parameters for compression, including image size & colorspace
jpeg_start_compress(...);
while (scan lines remain to be written)
jpeg_write_scanlines(...);
But obviously it looks like I haven't preallocated something.
Please advise
|
|
|
|
|
All I can suggest is that you build libjpeg for debug (i.e. include debug information), link your application to the debug library and step through jpeg_write_scanlines and find which line causes the access violation. You can then look at the variables associated with that line and see which pointer looks suspicious (NULL, probably!).
The other thing to try would be to verify that jsmpArray has been allocated correctly and that DibToSamps has completed successfully.
Java, Basic, who cares - it's all a bunch of tree-hugging hippy cr*p
|
|
|
|
|
Hello,
I would appreciate it if you help me in making a code for the UDP Ping by using C or C++.
|
|
|
|
|
ping doesn't use UDP - it's at the IP level (strictly, it uses ICMP), which is lower (closer to hardware) than UDP. See this[^] for full (very full) details.
[edit]Ah - I see what a UDP ping is - it's an effort to ping when ICMP is blocked. Look for "nmap source code" to find source for an application that will do a UDP ping. I'll give no more details than that because I'm not sure that UDP ping isn't evil.[/edit]
Java, Basic, who cares - it's all a bunch of tree-hugging hippy cr*p
modified on Wednesday, March 4, 2009 12:28 PM
|
|
|
|
|
|