|
The proper place to do all this is inside your override of the PreSubclassWindow() function.
This function is called regardless of whether the control is created dynamically with a call to Create(), or on-the-fly with a dialog resource template and subclassed with the DDX_Control functions.
See http://www.flounder.com/presubclasswindow.htm[^]
|
|
|
|
|
Hi all,
A simple question, although I do not know the answer, but how can I get the size of a char* array.
I have tried the following:
char* array[2] = {"!5","C2"};
sizeof(array)
sizeof(array) 8 (0x00000008)
Can anyone please help?
Thanks in advance
Regards,
The only programmers that are better that C programmers are those who code in 1's and 0's
Programm3r
My Blog: ^_^
|
|
|
|
|
you cannot. you have to maintain a counter variable to know the current number of elements in your array, if its size is not constant...
doing a sizeof(array) will do nothing but returning you the size of the variable array, which is of type char**; and as long as a pointer is 8 bytes long... sizeof(array) returns 8.
If you were using C++, you could have used std::vector<std::string> for instance, but AFAIK, you're using C only...
|
|
|
|
|
toxcct, thanks for the response, I don't want to be forward but how would one then do it using std::vector<std::string> (if I may be so bold ...)
Thanks again ...
The only programmers that are better that C programmers are those who code in 1's and 0's
Programm3r
My Blog: ^_^
|
|
|
|
|
those 2 classes are part of the Standard Template Library (better known as STL).
in your case, it would be very easy to use :
std::vector<std::string> array;
array.add("Hello");
array.add("World");
size_t n = array.size();
|
|
|
|
|
|
Programm3r wrote: (if I may be so bold ...)
Why is asking a legitimate question considered being bold?
"Normal is getting dressed in clothes that you buy for work and driving through traffic in a car that you are still paying for, in order to get to the job you need to pay for the clothes and the car and the house you leave vacant all day so you can afford to live in it." - Ellen Goodman
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
I think he refers to the daunting design challenge of using STL .
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.
[my articles]
|
|
|
|
|
in general, you can't. C/C++ doesn't keep track of array dimensions. at best, you can get the size of a 1D array like this:
#define _ARRAYSIZE(__a) (sizeof(__a)/sizeof(__a[0]))
int array[5] = {0,1,2,3,4};
int s = _ARRAYSIZE(array);
... s = 5
but that only works if the array is declared in the same scope - it won't work if you just have a pointer to the array.
use the STL's collections.
|
|
|
|
|
Thanks for the response Chris, I'll give it a try.
The only programmers that are better that C programmers are those who code in 1's and 0's
Programm3r
My Blog: ^_^
|
|
|
|
|
Programm3r wrote: A simple question, although I do not know the answer, but how can I get the size of a char* array.
Do you really need the size of the array or the number of its elements?
The compiler is, of course, answering correctly to your request: it returns 8 because your array contains two char * and each pointer size is 4 (on a 32-bit system).
If you want to know how many elements the array has, then use, as suggested
by Chris Losinger [^]
sizeof(array)/sizeof(array[0]);
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.
[my articles]
|
|
|
|
|
Thanks for the response CPallini.
CPallini wrote: Do you really need the size of the array or the number of its elements?
Yes, size of the array or the number of its elements.
CPallini wrote: If you want to know how many elements the array has, then use, as suggested
by Chris Losinger [^]
Thanks
Regards,
The only programmers that are better that C programmers are those who code in 1's and 0's
Programm3r
My Blog: ^_^
|
|
|
|
|
I'm developing a firewall that authenticate users with ntlm against Active Directory.
My ntlm secnario is complete and work truly but my LsaLogonUser has problem.
When I pass NTLM Challenge,User Name,Lan Manager Response, NTLM Response,WorkStation Name, Domain Name to MSV1_0_LM20_LOGON structure and pass it to LsaLogonUser
function, LsaLogonUser return error,
Dose anybody have a sample or code that can help me?
My code is here:
UNICODE_STRING TempString;
UNICODE_STRING TempString2;
PMSV1_0_LM20_LOGON Auth;
PCHAR Auth1[40*5]; /* lots o' space */
PUCHAR Strings;
Auth = (PMSV1_0_LM20_LOGON) Auth1;
Strings = (PUCHAR)(Auth + 1);
Auth->MessageType = MsV1_0Lm20Logon;
RtlMoveMemory( Auth->ChallengeToClient,challenge,MSV1_0_CHALLENGE_LENGTH );
RtlInitUnicodeString( &TempString, L"Administrator" );
NlpPutString( &Auth->UserName, &TempString, &Strings );
RtlInitUnicodeString( &TempString, L"TOSHIBA" );
NlpPutString( &Auth->Workstation, &TempString, &Strings );
Auth->CaseSensitiveChallengeResponse.Length = 0;
Auth->CaseSensitiveChallengeResponse.MaximumLength = 0;
Auth->CaseSensitiveChallengeResponse.Buffer = NULL;
TempString2.Buffer = (PWSTR)lmPassword;
TempString2.Length = (USHORT)cbLmResp;
TempString2.MaximumLength = TempString2.Length;
if( TempString2.Length > 24 ) {
TempString2.Length = 24;
}
NlpPutString((PUNICODE_STRING)&Auth->CaseInsensitiveChallengeResponse,(PUNICODE_STRING)&TempString2,&Strings);
RtlInitUnicodeString( &TempString, L"KHARAZM.SERVER" );
NlpPutString( &Auth->LogonDomainName, &TempString, &Strings );
UNICODE_STRING OrgnName;
RtlInitUnicodeString( &OrgnName, L"TOSHIBA" );
ULONG ProfileBufferSize;
sysLog("Len=%d",Strings - (PUCHAR)Auth);
Status = LsaLogonUser(
gLsaHandle,
(PSTRING)&OrgnName,
Network,
gAuthPackageId,
// LATER? AuthenticationPackage | LSA_CALL_LICENSE_SERVER,
Auth,
Strings - (PUCHAR)Auth,
NULL,
&SourceContext,
(PVOID *)&pProfileBuffer,
&ProfileBufferSize,
&LogonLuid,
pLogonToken,
&Quotas,
&SubStatus );
|
|
|
|
|
What is the error that LsaLogonUser() is returning?
Nobody can give you wiser advice than yourself. - Cicero
.·´¯`·->Rajesh<-·´¯`·.
...formerly known as brahmma
Codeproject.com: Visual C++ MVP
|
|
|
|
|
It's return -1073741715 means Invalid Username/Password.
My code is here:
//////////////////////////////////////////////////////////////////////////
UNICODE_STRING TempString;
UNICODE_STRING TempString2;
PMSV1_0_LM20_LOGON Auth;
PCHAR Auth1[40*5]; /* lots o' space */
PUCHAR Strings;
Auth = (PMSV1_0_LM20_LOGON) Auth1;
Strings = (PUCHAR)(Auth + 1);
Auth->MessageType = MsV1_0Lm20Logon;
RtlMoveMemory( Auth->ChallengeToClient,challenge,MSV1_0_CHALLENGE_LENGTH );
RtlInitUnicodeString( &TempString, L"Administrator" );
NlpPutString( &Auth->UserName, &TempString, &Strings );
RtlInitUnicodeString( &TempString, L"TOSHIBA" );
NlpPutString( &Auth->Workstation, &TempString, &Strings );
Auth->CaseSensitiveChallengeResponse.Length = 0;
Auth->CaseSensitiveChallengeResponse.MaximumLength = 0;
Auth->CaseSensitiveChallengeResponse.Buffer = NULL;
TempString2.Buffer = (PWSTR)lmPassword;
TempString2.Length = (USHORT)cbLmResp;
TempString2.MaximumLength = TempString2.Length;
if( TempString2.Length > 24 ) {
TempString2.Length = 24;
}
NlpPutString((PUNICODE_STRING)&Auth->CaseInsensitiveChallengeResponse,(PUNICODE_STRING)&TempString2,&Strings);
RtlInitUnicodeString( &TempString, L"KHARAZM.SERVER" );
NlpPutString( &Auth->LogonDomainName, &TempString, &Strings );
UNICODE_STRING OrgnName;
RtlInitUnicodeString( &OrgnName, L"TOSHIBA" );
ULONG ProfileBufferSize;
sysLog("Len=%d",Strings - (PUCHAR)Auth);
Status = LsaLogonUser(
gLsaHandle,
(PSTRING)&OrgnName,
Network,
gAuthPackageId,
// LATER? AuthenticationPackage | LSA_CALL_LICENSE_SERVER,
Auth,
Strings - (PUCHAR)Auth,
NULL,
&SourceContext,
(PVOID *)&pProfileBuffer,
&ProfileBufferSize,
&LogonLuid,
pLogonToken,
&Quotas,
&SubStatus );
//////////////////////////////////////////////////////////////////////////
|
|
|
|
|
Member 405269 wrote: means Invalid Username/Password.
So, isn't that error message clear enough?
On an additional note:
Please don't post code unless you're asked to. And instead of copy pasting the entire function, post the code that is relevant to the problem. I suggest that while posting code, please enclose it within the <pre> </pre> tags.
Nobody can give you wiser advice than yourself. - Cicero
.·´¯`·->Rajesh<-·´¯`·.
...formerly known as brahmma
Codeproject.com: Visual C++ MVP
|
|
|
|
|
Do you have a link or sample code that work truly?
However do you know another way to authenticate users with ntlm hash password?
|
|
|
|
|
Here is a link that might help you: LsaLogonUser - The function from hell[^]
Also, check if the function LogonUser() would help you.
Nobody can give you wiser advice than yourself. - Cicero
.·´¯`·->Rajesh<-·´¯`·.
...formerly known as brahmma
Codeproject.com: Visual C++ MVP
|
|
|
|
|
But LogonUser() only accept clear text password.
|
|
|
|
|
Hi,
In a com component ,I took a dialog resource added a class
for it and even inserted an Activex Control on dialog
(with activex variable m_ctrlHMFAx).
I am creating the dialog dynamically as shown below
pDialog = new CMyDialog();
if(pDialog != NULL)
{
BOOL ret = pDialog->Create(IDD_MYDIALOG,this);
if(!ret)
AfxMessageBox("Error creating Dialog");
pDialog->ShowWindow(SW_SHOW);
}
Now as my dialog is created I am trying to work with my
ActiveX variable as pDialog->m_ctrlHMFAx.AddItem(); but
it throws an assertion
when I debug I recognized that m_ctrlHMFAx is showing NULL
value.I tried creating the activex control dynamically in
OnInitdialog but no use.
I also placed AfxEnableControlContainer() in initinstance.
What could be the reason ? Any suggestions would be helpful.
Thanks
Satya
Today is a gift, that's why it is called the present.
|
|
|
|
|
narayanagvs wrote: I tried creating the activex control dynamically in
OnInitdialog but no use.
Usually you can have a quit amount of info (from HRESULT return value) whenever a step of such a operation fails.
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.
[my articles]
|
|
|
|
|
narayanagvs wrote: BOOL ret = pDialog->Create(IDD_MYDIALOG,this);
if(!ret) //Create failed.
AfxMessageBox("Error creating Dialog");
pDialog->ShowWindow(SW_SHOW);
If Create() fails, why proceed with calling ShowWindow() ?
"Normal is getting dressed in clothes that you buy for work and driving through traffic in a car that you are still paying for, in order to get to the job you need to pay for the clothes and the car and the house you leave vacant all day so you can afford to live in it." - Ellen Goodman
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
narayanagvs wrote:
BOOL ret = pDialog->Create(IDD_MYDIALOG,this);
if(!ret) //Create failed.
AfxMessageBox("Error creating Dialog");
pDialog->ShowWindow(SW_SHOW);
You must use of
if(!ret)
AfxMessageBox("Error creating Dialog");
else
pDialog->ShowWindow(SW_SHOW);
|
|
|
|
|
Hello everyone,
This question is about when it is allowed to call throw to re-throw exception -- make the exception re-throw.
I can only think of two situations,
1. in catch block of an exception;
2. in unexpected handler.
For (2), in unexpected handler, since the input parameter is null, so in order to get the exception information, we need to re-throw it and catch it to get exception informaiton.
Is my understanding correct? Here is some pseudo code from Bjarne's book.
void throwY() throw (Yunexpected)
{
try{
throw;
} catch (Network_exception& p)
{
throw (Yunexpected (&p));
} catch (...)
{
throw (Yunexpected (0));
}
}
thanks in advance,
George
|
|
|
|
|
Yes, and they're really the same as the unexpected handler is just like an ultimate catch block for when all others have failed to catch. If you want to understand how this works in the real world, as opposed to how Bjarne says it should work, then take a look at the source code for the C Runtime that ships with Visual Studio. C++ exception handling in the MS world relies on both the runtime and special code injected into your functions by the Compiler. There's also a good article on here somewhere called something like How C++ Exception Handling Really Works. Enjoy
Nothing is exactly what it seems but everything with seems can be unpicked.
|
|
|
|
|