|
Hello
I've used the eMbedded C++ compilers for Pocket PC programming but this is the first time that I used MS's Visual C++ .NET (Microsoft Visual C++ .NET 69535-005-1427842-18707). I've successfully created a minimal application and incorporated some classes developped for CodeProject and described here. Here's the problem... which has been confusing two of us for several hours already:
We can't move our controls! When we try re-positioning a button on a dialog box by dragging it on the visual editor, it keeps the old value. The .rc file has the correct position for the control and we cannot find the control's id anywhere in the project files or in the registry... where does it remember the old values?? I've tried an example program and had no problem repositioning buttons! I compared project settings, but could not find any difference. I've look for articles or messages here and elsewhere that would deal with the project but I couldn't find any.
Anyone has a clue? Thanks!
-Philippe Gibelin
|
|
|
|
|
I assume the code is repositioning the controls then!? Are you using any layout management code?
Ant.
I'm hard, yet soft. I'm coloured, yet clear. I'm fruity and sweet. I'm jelly, what am I? Muse on it further, I shall return! - David Walliams (Little Britain)
|
|
|
|
|
> I assume the code is repositioning the controls then!? Are you
> using any layout management code?
Yes yes yes. Our mistake. Big mistake! That code wasn't doing what we thought it was doing. Thank you!
-Philippe
|
|
|
|
|
Hi,
I am building an MFC ActiveX control. This ActiveX has a child of type CListBox as follows:
In my ActiveXCtl.h file I created a new data member for the child:
CListBox* pmyListBox;
In the ActiveCtl.cpp OnCreate, I added the following:
pmyListBox = new (CListBox);
DWORD dwListStyle = WS_CHILD|WS_VISIBLE|LBS_OWNERDRAWVARIABLE|LBS_NOINTEGRALHEIGHT|LBS_NOTIFY;
pmyListBox->CreateEx(WS_EX_TOPMOST,_T("LISTBOX"), NULL, dwListStyle, CRect(0, 0, 1, 1), this, 1);
Then I added a new method called "AddRow" as follows:
void CMyListboxCtrl::AddRow()
{
CString str;
str.Format(_T("item string %d"), 1);
pmyListBox->AddString( str );
}
Everything works fine until I test my ActiveX under Visual Basic .NET 2003 project, when I call "AddRow" method a NULL reference error is generated. The strange thing is that the control works fine under VB6 and VB .NET 2002!!
Does anyone know the cause of this error, or can help me finding it or how I can get rid of it!
Thanks,
Daed
|
|
|
|
|
How to get the frame rate of a .wmv file while the IWMInfoHeader interface cannot get the related attributes? Thanks
|
|
|
|
|
I have a problem runnin' my application. I used lots of char* 'cause I needed to scan ASCII files. Scanning one file is ok, but with more files, exiting the application generates a messages error
"Instruction xxxx pointed to memory yyyy. Memory couldn't be 'read' (or 'written')"
Debugging the application, the problem is located in dbgheap.h, line 1011.
Changing the type of application, the problem shifts to sbheap.h.
I've read about changing debug settings (using RTTI and so on), but the error still remain.
Any suggestion?
|
|
|
|
|
You are most likely writing past the end of an allocating heap block. You need to work through your code and try and track the cause down. There are various CRT Heap Debugging functions that will help with this. Google "crt debug heap" for help on this.
Neville Franks, Author of ED for Windows www.getsoft.com and Surfulater www.surfulater.com "Save what you Surf"
|
|
|
|
|
Hai Frens.. .
I need to know how to select multiple rows by pressing Ctrl key in flex grid.
If any body finds some tutorials for grid manipulation. . .in net please give me the link.
Thanx bye
|
|
|
|
|
How to get the frame rate of a .wmv file if the attribute WM/VideoFrameRate cannot be found by the interface IWMHeaderInfo?
|
|
|
|
|
I try to create a file, the filename i will get from a string. What do I do wrong. It works ok in Visual C++, but in Emededd C++ i get an error.Some one told me that i just have to convert ,char* filnavn1 to a wide char format string
Can some one show me how I do that.
HANDLE hFile1;
char *filename1;
char *token;
char seps[] = ",";
char string[] = "\\windows\\2004-10-T-gr1-tstTag1.csv,\\windows\\2004-10-T-gr1-tstTag2.csv";
token = strtok( string, seps );
filnavn1 = token;
hFile1 = CreateFile (filnavn1, // Open .txt
GENERIC_READ, // Open for reading
0, // Do not share
NULL, // No security
OPEN_EXISTING, // Existing file only
FILE_ATTRIBUTE_NORMAL, // Normal file
NULL); // No template file
Get this error:
cannot convert parameter 1 from 'char *' to 'const unsigned short *
|
|
|
|
|
Instead of using char*, try to use TCHAR*.
So, for example for string:
TCHAR* string = _T("\\windows\\2004-10-T-gr1-tstTag1.csv,\\windows\\2004-10-T-gr1-tstTag2.csv");
And instead of strtok, use wcstok.
|
|
|
|
|
Still get an error
cstok' : cannot convert parameter 2 from 'char [2]' to 'const unsigned short *
int ch = ',';
TCHAR* token;
int i = 0;
int ch = ',';
TCHAR* filnavn1;
TCHAR* string = _T("\\windows\\2004-10-T-gr1-tstTag1.csv,\\windows\\2004-10-T-gr1-tstTag2.csv");
|
|
|
|
|
Always use TCHAR instead of chars. This error comes because you pass a char array instead of a TCHAR array.
|
|
|
|
|
As I told you in another thread, there seems to be something fishy about the way your compiler handles the typedefs for TCHAR, PSTR, LPSTR and so on.
When you invoke CreateFile, you actually invoke either CreateFileA or CreateFileW based on whether UNICODE is defined or not.
Based on the error message, it seems that you are calling CreateFileW, which takes a unsigned short * as the filename parameter. This indicates that UNICODE is defined. I have no idea about what you mean when you mention "Emededd C++", but somewhere UNICODE is defined either explicit or implicit.
You have some considerations to do:
1. If you are sure that you only need to build for unicode, then you could start to use the proper functions explicit like this:
HANDLE hFile1;
unsigned short *filename1;
unsigned short *token;
unsigned short seps[] = L",";
unsigned short string[] = L"\\windows\\2004-10-T-gr1-tstTag1.csv,\\windows\\2004-10-T-gr1-tstTag2.csv";
token = wcstok( string, seps );
filnavn1 = token;
hFile1 = CreateFile (filnavn1,
GENERIC_READ,
0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
2. Or you could find out why your compiler insists on using the *W functions, but in the same breath refuses to translate TCHAR to unsigned short .
I would go for #2
By the way, for runtime translation of string types: look up MultiByteToWideChar(), but as I said, you main problem is the confusion of string types.
"After all it's just text at the end of the day. - Colin Davies
"For example, when a VB programmer comes to my house, they may say 'does your pool need cleaning, sir ?' " - Christian Graus
|
|
|
|
|
jan larsen wrote:
I have no idea about what you mean when you mention "Emededd C++"
FYI,
Microsoft eMbedded C++[^]
Is a development IDE for writing code for Windows CE based devices. It instists on UNICODE.
Ant.
I'm hard, yet soft. I'm coloured, yet clear. I'm fruity and sweet. I'm jelly, what am I? Muse on it further, I shall return! - David Walliams (Little Britain)
|
|
|
|
|
Ah, "Embedded", I had a vague idea that this was probably the case , I didn't know it insisted on UNICODE.
"After all it's just text at the end of the day. - Colin Davies
"For example, when a VB programmer comes to my house, they may say 'does your pool need cleaning, sir ?' " - Christian Graus
|
|
|
|
|
Sorry, I think it is rather that CE requires UNICODE therefore the API implementations are all UNICODE.
Ant.
I'm hard, yet soft. I'm coloured, yet clear. I'm fruity and sweet. I'm jelly, what am I? Muse on it further, I shall return! - David Walliams (Little Britain)
|
|
|
|
|
Thanks to Antony for clearing up some things here.
Embedded C++ insists on UNICODE, this means that if you want to build for both platforms, you should use the proper typedefs when working with strings.
Michael Dunn has written a very good article on this: The Complete Guide to C++ Strings[^]
So it seems that the compiler confusion springs from: When compiling for the embedded environment, it will allways link to wide character functions, this means that you can't use char , and that, when you compile for the embedded environment, have to define UNICODE.
"After all it's just text at the end of the day. - Colin Davies
"For example, when a VB programmer comes to my house, they may say 'does your pool need cleaning, sir ?' " - Christian Graus
|
|
|
|
|
TCHAR* filnavn1 did it.
Did not know that it was UNICODE.
All works fine now.
Thanks to all
|
|
|
|
|
This problem puzzled me a long time,can somebody help me?
Thanks a lot!
(Visual C++ 6.0)
Use MFC wizard to create a ActiveX Control project.Name the control class as CTestCtrl. Then Use Classwizard to add a new class to project, name it as CTestObj ,select CCmdTarget as base class,select create by ID "testctrl.TestObj". Now use ClassWizard to add a Automation method named GetObj to the control CTestCtrl.The method has a parameter that is of LPDISPATCH type. The definition just like below
void CTestCtrl::GetObj(LPDISPATCH inserObj)
{
CTestObj *pObj = (CTestObj*) CCmdTarget::FromIDispatch( inserObj);
if (!pObj)
AfxMessageBox("Error, cannot get dispatch object");
else
AfxMessageBox("OK");
}
The project is ready now, build and register the control.
Write a simple test html page using visual Interdev(or anything else).Insert the TestCtrl and a Button to the html page .Add below codes for the button click event function.
var obj = new ActiveXObject("testctrl.TestObj");
DTestocx1.GetObj(obj);
Now begin test.Open an IE window and Select File->Open to open the test html page. Click the button,it will show message "ok". But if you select File->New Window in IE to open a new same window, and in new IE window click the button ,it will show "Error, cannot get dispatch object" . Why???
|
|
|
|
|
Hi.
This may not be entirely proper for this group, but it would be nice to have
a C++ solution...
I'm running cacls in order to change permissions for a folder. (Setting
change permission to the "Everyone" group.) E.g. cacls <dirname> /E /G
Everyone:C
The problem is however that the name of this "everyone" group is not
"Everyone" on non-english Windows OS.
I'm running cacls as part of an installation, and the product can be
installed on NT/2000/XP in any language. The installation fails however,
when i run cacls as listed above on non-english OS. I need to replace
"Everyone" with the correct name for the group in the language of the OS the
product is being installed on.
So, is there a way to get the correct name of the "everyone" group?
- Jan Ove Aase
|
|
|
|
|
Maybe NetGroupEnum or the ADSI IADsGroup will help.
Ant.
I'm hard, yet soft. I'm coloured, yet clear. I'm fruity and sweet. I'm jelly, what am I? Muse on it further, I shall return! - David Walliams (Little Britain)
|
|
|
|
|
I am not familiar with CACLS, but I do know there is a listing in the MSDN of well known SIDs and the 'everyone' group has a well known SID, perhaps you can use that instead.
We ran into a similar problem with translating 'Everyone' and I changed the code to use the well known SID instead.
|
|
|
|
|
Yes, this seems like a good solution. Except, the MSDN doc says it's only included in XP and later. I need a solution that will work for W2000 and NT4.
Am I missing something, or is this solution only for XP?
Jan Ove Aase
|
|
|
|
|
I finally managed to sort it out. I can use InitializeSid on NT/2000 (seems to work on XP too), and CreateWellKnownSid on XP and Server2003.
InitializeSid does not create a valid SID for LookupAccountSid on XP or Server2003. (Actually, when I built release, it did work on XP, but not in debug mode.)
Anyway, with two programs, one for NT/2000 and one for XP and later, it seems to work.
Thanks.
Jan Ove Aase
|
|
|
|
|