|
raju_shiva wrote: I want to comapare the strings with the given character and sort it Alphapatecially
Wasn't sorting working here?
"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
"Man who follows car will be exhausted." - Confucius
|
|
|
|
|
Hi!
When I execute my program, my application window opens and closes in a sudden. Then a window called
Data Execution prevention window opens. If click that window it has the following data:
Problem signature:
Problem Event Name: BEX
Application Name: CricCEGUI.exe
Application Version: 0.0.0.0
Application Timestamp: 4c259f04
Fault Module Name: StackHash_4930
Fault Module Version: 0.0.0.0
Fault Module Timestamp: 00000000
Exception Offset: 01079340
Exception Code: c0000005
Exception Data: 00000008
OS Version: 6.0.6002.2.2.0.256.1
Locale ID: 1033
Additional Information 1: 4930
Additional Information 2: b5c2ee444cce2fcc0c63bdde408d8084
Additional Information 3: b9dd
Additional Information 4: c9f8be406ff0c0f9c077c4f309046cec
What does this mean? How do I run my application without crash?
|
|
|
|
|
|
Its look like you are corrupting one of the buffer. Please have a review of your code.
|
|
|
|
|
Does anyone have a reliable implementation of IsTextUnicode()?
I'm tired of dealing with it. All I can find on the internet are people complaining about it, but so far no better alternative.
|
|
|
|
|
Man, that's shocking! I came here to ask the very same question. Please let me know if you find something useful (I'll do the same).
Workout progress:
Current arm size: 14.4in
Desired arm size: 18in
Next Target: 15.4in by Dec 2010
Current training method: HIT
|
|
|
|
|
It's not shocking to me, it's pathetic and annoying. This situation has existed for many years, and MS continues to ship this crappy API.
|
|
|
|
|
Rajesh R Subramanian wrote: Workout progress:
Current arm size: 14.4in
Desired arm size: 18in
Next Target: 15.4in by Dec 2010
Thats Incredible
"Opinions are neither right nor wrong. I cannot change your opinion. I can, however, change what influences your opinion." - David Crow Never mind - my own stupidity is the source of every "problem" - Mixture
cheers,
Alok Gupta
VC Forum Q&A :- I/ IV
Support CRY- Child Relief and You
|
|
|
|
|
The documentation for IsTextUnicode() states:
Determines if a buffer is likely to contain a form of Unicode text.
Which is to say, it can only test for the likelihood by sampling various bytes within the buffer. Since there is no byte or word pattern which absolutely guarantees that a buffer is Unicode there is no way that such a function can guarantee to recognise it.
It's time for a new signature.
|
|
|
|
|
And I've asked them several times why they have that crappy API and they say it could help instead of nothing.
But the problem is - it NEVER worked, so why have it?!
Workout progress:
Current arm size: 14.4in
Desired arm size: 18in
Next Target: 15.4in by Dec 2010
Current training method: HIT
|
|
|
|
|
You are right, I just tried it and what do you know - it doesn't work.
See other answer below.
It's time for a new signature.
modified on Saturday, June 26, 2010 9:32 AM
|
|
|
|
|
Nothing seems to work.
The output of the code below is always Text is ASCII
#define UNICODE
#define _UNICODE
#include <windows.h>
#include <tchar.h>
#include <wchar.h>
#include <stdio.h>
int main()
{
char *asciimessage = "This is an ASCII string.";
wchar_t *unicodemessage = L"This is a Wide Unicode string.";
TCHAR *automessage = TEXT("This message can be either ASCII or UNICODE!");
if(IsTextUnicode(unicodemessage,80,NULL))
printf("Text is Unicode\n");
else
printf("Text is ASCII\n");
if(IsTextUnicode(asciimessage,80,NULL))
printf("Text is Unicode\n");
else
printf("Text is ASCII\n");
return 0;
}
|
|
|
|
|
Your parameters are incorrect. You have specified 80 for the buffer length in both your calls, but neither of your strings are 80 bytes long, so the tests will be inspecting some random data beyond the end of the strings.
See also my response below.
It's time for a new signature.
|
|
|
|
|
This code works:
char ascii[] = "The rain in Spain";
WCHAR ucode[] = L"The rain in Spain";
wcout << "Testing the ASCII string" << endl;
if (IsTextUnicode(ascii, sizeof ascii, NULL))
wcout << "It is Unicode" << endl;
else
wcout << "It is NOT Unicode" << endl;
wcout << "Testing the Unicode string" << endl;
if (IsTextUnicode(ucode, sizeof ucode, NULL))
wcout << "It is Unicode" << endl;
else
wcout << "It is NOT Unicode" << endl;
The issue seems to be that the buffer length must be correct, and parameter 3 should be NULL to ensure all possible tests are tried.
It's time for a new signature.
|
|
|
|
|
Thanks Richard.
I ran your code and it works.
Output:
Testing the ASCII string
It is NOT Unicode
Testing the Unicode string
It is Unicode
Press any key to continue
Complete code listing
#define UNICODE
#define _UNICODE
#include <windows.h>
#include <tchar.h>
#include <wchar.h>
#include <stdio.h>
#include <iostream.h>
int main()
{
char ascii[] = "The rain in Spain";
WCHAR ucode[] = L"The rain in Spain";
cout << "Testing the ASCII string" << endl;
if (IsTextUnicode(ascii, sizeof ascii, NULL))
cout << "It is Unicode" << endl;
else
cout << "It is NOT Unicode" << endl;
cout << "Testing the Unicode string" << endl;
if (IsTextUnicode(ucode, sizeof ucode, NULL))
cout << "It is Unicode" << endl;
else
cout << "It is NOT Unicode" << endl;
return 0;
}
|
|
|
|
|
I wish it were as simple as that. Try this:
LPCWSTR str = L"कमल";
BOOL b = false;
b = IsTextUnicode(str, _tcslen(str), NULL);
if(b)
AfxMessageBox(L"Text is Unicode!");
else
AfxMessageBox(L"Boo!");
I've worked extensively with Asian languages and I've never had this API to work reiably. I know the documentation kinda confesses it, but there has been no development on this at all!
Richard MacCutchan wrote: char ascii[] = "The rain in Spain";
Richard MacCutchan wrote: if (IsTextUnicode(ascii, sizeof ascii, NULL))
Also, your example is flawed because you're wrongly passing the size of the pointer instead of passing the size of the buffer itself in bytes.
Workout progress:
Current arm size: 14.4in
Desired arm size: 18in
Next Target: 15.4in by Dec 2010
Current training method: HIT
|
|
|
|
|
Rajesh R Subramanian wrote: Also, your example is flawed because you're wrongly passing the size of the pointer instead of passing the size of the buffer itself in bytes.
No. Last time I checked:
char ascii[] = "The rain in Spain";
sizeof ascii == ::strlen(ascii) + 1
|
|
|
|
|
Yes, yes, apologies. See my reply to Richard.
Workout progress:
Current arm size: 14.4in
Desired arm size: 18in
Next Target: 15.4in by Dec 2010
Current training method: HIT
|
|
|
|
|
No worries, I consider it a typo
|
|
|
|
|
I wonder what result you would get if the second param was number of bytes:
1 LPCWSTR str = L"कमल";
2 BOOL b = false;
3 b = IsTextUnicode(str, _tcslen(str)*sizeof(WCHAR), NULL);
|
|
|
|
|
What pointer? Richard was taking the size of an array.
Ash
|
|
|
|
|
This works: (apologies if that is not Hindi, and I hope it's a nice word!)
WCHAR hindi[] = L"कमल";
wcout << sizeof hindi << endl;
if (IsTextUnicode(hindi, sizeof hindi, NULL))
wcout << "It is Unicode" << endl;
Note the result of the sizeof operator; sizeof arrayName gives size in bytes, which is the value required by the IsTextUnicode() function.
It's time for a new signature.
|
|
|
|
|
I must stop replying in the middle of the night. I overlooked it were size of an array.
The word cannot be nicer, it means "Lotus". This probably means the API is now "improved"?! I'd be glad to go and test some of the old stuff that never worked. I'll keep you posted if they don't!
Workout progress:
Current arm size: 14.4in
Desired arm size: 18in
Next Target: 15.4in by Dec 2010
Current training method: HIT
|
|
|
|
|
Rajesh R Subramanian wrote: I must stop replying in the middle of the night.
If it's any consolation I do this all the time in the middle of the day!
It's time for a new signature.
|
|
|
|
|