|
In struggling to convert a piece of Linux code to Windows, I cannot rid of this errors:
typedef enum {
NULL_RID = 0, WORLD_RID = 0,
LOCAL_RID = 0,
OWNER_RID = 0,
GROUP_RID = 1,
....
....
PREACCESS = 0x22a,
} SOME_IDE;
seem to be something simple, but what ? Can you give me a little help ?
|
|
|
|
|
It looks to be syntactically correct. Maybe how it's used is incorrect, or some piece of code preceding it is incorrect.
"One man's wage rise is another man's price increase." - Harold Wilson
"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
"You can easily judge the character of a man by how he treats those who can do nothing for him." - James D. Miles
|
|
|
|
|
Probably there is a #define like, for instance
#define NULL_RID 0
In the included files (use Visual Studio 'search in files' editor command to find it).
See example 2 in the following page Compiler Error C2059 | Microsoft Docs[^].
|
|
|
|
|
There is most likely something missing or incorrect, earlier in the code that you have not shown.
|
|
|
|
|
I just started to study this theme, so strongly do not swear.
Tell me why this code works.
HBITMAP startBitmap = (HBITMAP)LoadImage(NULL, "D:\\159.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
m_PictureControl.SetBitmap(startBitmap);
And this does not work.
HANDLE FileR = CreateFile("D:\\159.bmp", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
DWORD size_file = GetFileSize(FileR, 0);
HBITMAP startBitmap = (HBITMAP)malloc(size_file);
DWORD dwReadW;
ReadFile(FileR, startBitmap, size_file, &dwReadW, NULL);
m_PictureControl.SetBitmap(startBitmap);
As I assume the buffer is necessary as it is to prepare before an image displayed on the screen. But unfortunately I do not understand how to do it.
modified 2-Oct-19 14:04pm.
|
|
|
|
|
The first reads an existing file; the second creates an "empty" file and expects magic.
It was only in wine that he laid down no limit for himself, but he did not allow himself to be confused by it.
― Confucian Analects: Rules of Confucius about his food
|
|
|
|
|
Gerry Schmitz wrote: an "empty" file
If you not it is difficult explain please my mistake.
I'm not creating a file I'm reading it to the buffer. The data from the buffer in order.
modified 2-Oct-19 14:03pm.
|
|
|
|
|
Member 12661464 wrote:
And this does not work. Which means what exactly?
Have you stepped through the code to make sure that CreateFile() , GetFileSize() , ReadFile() , and SetBitmap() all return "success" values?
"One man's wage rise is another man's price increase." - Harold Wilson
"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
"You can easily judge the character of a man by how he treats those who can do nothing for him." - James D. Miles
|
|
|
|
|
The first reads file and "convert" the read data to be interpreted as a HBITMAP.
The second just reads some binary data that cannot be interpreted as a HBITMAP.
|
|
|
|
|
Victor Nijegorodov wrote: cannot be interpreted as a HBITMAP
I understand this, but I can't understand how do I convert this data to an image, how do I process the buffer?
|
|
|
|
|
Well, what is your goal? Are you trying to reinvent the wheel? Or what?
|
|
|
|
|
I want to understand what the LoadImage function does with a file, cuts off the header ? How does it convert data?
I find the image in the resources of the file, it does not lie in the open as a picture. I read in buffer specifically the place where image of the is.
modified 2-Oct-19 17:10pm.
|
|
|
|
|
|
The data you have read from the file is in raw format and needs to be converted to Bitmap format. Your code is missing the conversion part. See bitmap format - Google Search[^].
|
|
|
|
|
I would be very grateful for a hint which WinAPI functions convert data to Bitmap format.
|
|
|
|
|
|
Now that I have understood everything and got the right result, I read my question with a smile. Thank you very much to everyone who sent me in the right direction.
|
|
|
|
|
I am trying to convert some code from Linux to Windows. So, I've met two warnings at one single line of code:
typedef enum {
SOME_LINK =
const le64(0x022B4AAC34546A39ULL), ....
of course, I can disable this warning, but I want to do things right how can I get rid of this warning by a correction ? It is possible ?
modified 3-Oct-19 1:50am.
|
|
|
|
|
Default enum is an int. You need a long.
It was only in wine that he laid down no limit for himself, but he did not allow himself to be confused by it.
― Confucian Analects: Rules of Confucius about his food
|
|
|
|
|
And how can setup that enum as ulong ?
|
|
|
|
|
A standard 'enum' in C can only be of types 'int' or 'unsigned int'. This value is an 'unsigned long long'.
This sort of thing is usually done in order to aggregate constants into a namespace. Unfortunately, Standard C does not allow this. If your 'enum' is, for example, called LINKS, try:
typedef unsigned long long LINKS;
#define SOME_LINK …
Freedom is the freedom to say that two plus two make four. If that is granted, all else follows.
-- 6079 Smith W.
|
|
|
|
|
Quote: of course, I can disable this warning, but I want to do things right Do NOT disable the warning. Data would be truncated, (that is an error).
|
|
|
|
|
Totally agree with you, that is why I asked here a solution. I have declared like this that enum:
typedef enum LINK : unsigned long long {
SOME_LINK = 0x01F5E4CA2A46E33ULL,
...
and those warning has gone ... I hope is ok now.
|
|
|
|
|
So you are using C++ on a little endian machine, right?
|
|
|
|
|
Yes, it is x86/x64 Intel.
From Wikipedia:
Current architectures<br />
The Intel x86 and also AMD64 / x86-64 series of processors use the little-endian format.
|
|
|
|