|
Hi George,
the answer is no; there is no macro/constant giving max length.
However there is a Win32 function that gives you the max length, it is called GetComputerNameEx ; just give it a buffer=NULL and a size variable whose value is set to zero. Upon return, read that very same size value, then allocate a sufficiently large buffer, and call GetComputerNameEx again.
BTW: this is a common pattern in Win32: first ask for size, then allocate, then ask for data using the same function.
|
|
|
|
|
Thanks Luc,
I am just surprised there is no such macro defined on Windows as built-in macro.
regards,
George
|
|
|
|
|
Some parameters just aren't constant, e.g. they depend on installation choices, available hardware, etc. In these cases you need to actually run some code to determine maximum sizes. Not sure why it would be dynamic in this case, but that is the author's decision after all.
|
|
|
|
|
|
OK.
does it match the return value when size zero was given?
|
|
|
|
|
|
Your answer is in the link YOU provided
"The length of the name may be greater than MAX_COMPUTERNAME_LENGTH
characters because DNS allows longer names. To ensure that this buffer
is large enough, set this parameter to NULL and use the required buffer
size returned in the lpnSize parameter."
As many others have mentioned, that's the proper way to use the API.
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Thanks Mark!
You mean call this API twice? I showed my understanding of your points in the following pseudo code. Any comments? Does it what you mean?
int size;
GetComputerNameEx(
__in COMPUTER_NAME_FORMAT NameType,
NULL,
&size
);
buffer = new char[size+1];
GetComputerNameEx(
__in COMPUTER_NAME_FORMAT NameType,
buffer,
&size
);
regards,
George
|
|
|
|
|
George_George wrote: You mean call this API twice?
Yes.
You may want to increment the size variable before the second call...
int size = 0;
GetComputerNameEx(
__in COMPUTER_NAME_FORMAT NameType,
NULL,
&size
);
size++;
buffer = new char[size];
GetComputerNameEx(
__in COMPUTER_NAME_FORMAT NameType,
buffer,
&size
);
Many APIs were designed to be called that way.
If you absolutely must use a static buffer length, in my experience,
a buffer size of 260 (MAX_PATH) has always been large enough.
Doing it as shown above is the safe, correct way, however.
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
|
Hi,
I am using VLC plugin 2 Active X control in vc++ sample application.
I can able to see live video, using CVLCPlaylist.add() method call.
How to take snapshot?
Any help ?
|
|
|
|
|
printscreen button
OK,. what country just started work for the day ? The ASP.NET forum is flooded with retarded questions. -Christian Graus
Best wishes to Rexx[^]
|
|
|
|
|
Hi,
Thanks for your reply.
how to set the snapshot path?
is there any default path for snapshot?
I tried your suggestion for taking snapshot.
But it is not working.
Is there any possibility to use CVLCVideo::takeSnapshot() ?
|
|
|
|
|
I dont know if this is the right forum to post this query
i wanted to know if we can achieve inheritance and encapsulation in C.
|
|
|
|
|
With some effort, you can mimic inheritance.
Use of structs effectively gets you encapsulation.
|
|
|
|
|
a little more explanation will be of great help.
|
|
|
|
|
struct base<br />
{<br />
};<br />
<br />
struct derived : public base<br />
{<br />
};
"Love people and use things, not love things and use people." - Unknown
"The brick walls are there for a reason...to stop the people who don't want it badly enough." - Randy Pausch
|
|
|
|
|
?
struct derived : public base
that is not C
|
|
|
|
|
I see that I failed to see that the OP wanted a solution in C.
"Love people and use things, not love things and use people." - Unknown
"The brick walls are there for a reason...to stop the people who don't want it badly enough." - Randy Pausch
|
|
|
|
|
Why don't you use C++ , instead?
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]
|
|
|
|
|
that is a good qusestion.. i can certainly use C++. but its just the curiosity to know how it can be done. i actually saw in a forum that inheritance can be acheived in c but there was no practical example available in the forum, there was only some explanations that was not satisfactory. so wanted to know more about it . if you could provide that would be great.
|
|
|
|
|
Just read this - Object Oriented Programming in C[^]. Implementing OOP behavior in C is not tough because cfront - the first C++ compiler does compilation by translating C++ source to C and then compile it. If you are insterested, have a look at the cfront source from here[^].
Regards,
Jijo.
_____________________________________________________
http://weseetips.com[ ^] Visual C++ tips and tricks. Updated daily.
|
|
|
|
|
Hi, I've created an owner draw Menu and i wanted to get the text and the shortcut key seperately. Any idea??
By calling below code, it will get both text and shortcut key and put inside a string.
COwnerMenu OwnerMenu; //this is inherit from CMenu
OwnerMenuPointer->GetMenuString(i, str, MF_BYPOSITION);
I tried to seperate it by searching "Ctrl+"
But as the shortcut key might not started with Ctrl+, so i cant use this method..
Can i get the shortcut key and also the text seperately by using the pointer "OwnerMenuPointer" ??
I've search through net and I cant find any solution
Any help would be appreciated.
Regards,
KH
good
|
|
|
|
|
The shortcut text is separated from the menu item text by a tab character. Just search for \t within the menu string and split it at that point.
|
|
|
|
|
OH THANKS!!!
IT WORKS !!
good
|
|
|
|