|
Hello everyone.
I'm very new to C++. I typically stay in .NET, but I can't do this in VB.
I'm writing an Explorer replacement shell and am working on capturing the system tray icon messages. I've been able to successfully create a window and can see the icon information via WM_COPYDATA messages in WndProc. I initially tried to forward those messages on to my VB.NET app using SendMessage. That didn't work so well. Everything I got was garbage.
That has me thinking of creating a C++ Win32 DLL to create window and watch the messages. Then, using a callback function, alert the host application (my VB app) of the new data.
One problem: I don't have the foggiest idea how to write callback functions! I'm new new new to C++. I'm having enough trouble wrapping my head around having more than one type of String!
Please if someone can help, I'd really appreciate it! I need to be able to send the host application a NOTIFYICONDATA struct.
Thanks,
Ray Phillips
LCARS x32 - A Star Trek Shell
|
|
|
|
|
Hi all,
I m using CeCreateProcess function to create process in mobile like this.
for(int i=0;i<25;i++)
{
PROCESS_INFORMATION pi;
test:
if (!CeCreateProcess(
L"Test.exe",
NULL,
NULL,
NULL,
FALSE,
0,
NULL,
NULL,
NULL,
&pi))
{
goto test;
}
else
{
WaitForSingleObject( pi.hProcess, INFINITE );
CeCloseHandle( pi.hProcess);
CeCloseHandle( pi.hThread);
}
}
when i m creating process at multiple time so after some time its return false so i m using goto to call again the process,while the process not created successfully.
can u tell me please why its return false after sometime and when i call it again n again its looks like hanged but respond after some time and create the process successfully.
i think there is some memory problem.
so please tell me how can i release the previous memory before create a new process.
if possible please explain me with example.
thanks in advance.
To accomplish great things, we must not only act, but also dream;
not only plan, but also believe.
|
|
|
|
|
Windows CE 1.0 through CE 5.0 and Windows Mobile is limited limited to 32 processes and your for-loop has 25 iterations. If there are other processes running at the same time you may be going over the 32 limit.
You can call CeGetLastError[^] to see why CeCreateProcess[^] is failing:
System Errors - Numerical Order[^]
Best Wishes,
-David Delaune
|
|
|
|
|
Now i m noticed that diffreant geterror function return diffreant values.
HRESULT hr = CeGetLastError();
here hr=0x0000000e Not enough storage is available to complete this operation.
HRESULT hr1 = CeRapiGetError();
here hr1=S_OK
HRESULT hr2 = GetLastError();
here hr2=S_OK
please explain me i m confused.
which one is right.
please help me thanks in advance.
To accomplish great things, we must not only act, but also dream;
not only plan, but also believe.
|
|
|
|
|
"_$h@nky_" wrote: which one is right.
please help me thanks in advance.
0xe == ERROR_OUTOFMEMORY so it looks like you are running out of memory on your mobile device.
Technically all of those function calls are correct. CeGetLastError [^]is returning the error code which was made through the RAPI function calls[^]. CeRapiGetError[^] is returning the last error inside the Remote API[^] which was none. GetLastError[^] is for returning the last error which was *not* called by an RAPI call.
Also keep in mind that these RAPI error functions are *not* thread-safe. So if your application creates multiple client RAPI threads each thread can overwrite the application error code.
Best Wishes,
-David Delaune
|
|
|
|
|
Please tell me how can i release memory of my mobile device.
To accomplish great things, we must not only act, but also dream;
not only plan, but also believe.
|
|
|
|
|
"_$h@nky_" wrote: Please tell me how can i release memory of my mobile device.
All of the memory used by the process should be released once the application has exited. The process remains until all threads and all handles to the process and its threads are closed. I see that you are closing the handles.
For debugging purposes I would add a call to CeGlobalMemoryStatus[^] after each process creation so you can monitor the usage.
You can possibly call SHCloseApps[^] to have the device release additional memory.
Best Wishes,
-David Delaune
|
|
|
|
|
Randor wrote: You can possibly call SHCloseApps[^] to have the device release additional memory.
for SHCloseApps function need to add aygshell.h or aygshell.lib,where i can find those files.
To accomplish great things, we must not only act, but also dream;
not only plan, but also believe.
|
|
|
|
|
I m adding aygshell.h and after using SHCloseApps function but one error occured.
error LNK2019: unresolved external symbol _SHCloseApps referenced in function "public: void __thiscall CTestDlg::Test_Func(void)" (?Test_Func@CTestDlg@@QAEXXZ)
CTestDlg::Test_Func(void)
{
PROCESS_INFORMATION pi;
CString CMDdata;
MEMORYSTATUS MemStats;
MemStats.dwLength = sizeof(MEMORYSTATUS);
USES_CONVERSION;
if (!CeCreateProcess(
L"Test.exe",
T2CW((LPCTSTR)CMDdata),
NULL,
NULL,
FALSE,
0,
NULL,
NULL,
NULL,
&pi))
{
CeGlobalMemoryStatus((LPMEMORYSTATUS) &MemStats);
if (MemStats.dwAvailPhys < MIN_MEMORY_TO_RUN)
{
if (!SHCloseApps(MIN_MEMORY_TO_RUN))
{
AfxMessageBox("Not free memory");
}
else
{
AfxMessageBox("free memory");
}
}
CeRapiUninit();
}
else
{
CeCloseHandle( pi.hProcess);
CeCloseHandle( pi.hThread);
}
}
To accomplish great things, we must not only act, but also dream;
not only plan, but also believe.
|
|
|
|
|
"_$h@nky_" wrote: error LNK2019: unresolved external symbol _SHCloseApps referenced in function "public: void __thiscall CTestDlg::Test_Func(void)" (?Test_Func@CTestDlg@@QAEXXZ)
The AYGShell Functions[^] require you to link with the aygshell library.
#pragma comment(lib, "aygshell.lib")
Best Wishes,
-David Delaune
|
|
|
|
|
I m also try this,even i add lib file from Project property page like
To add .lib files as linker input in the development environment
Open the project's Property Pages dialog box. For details, see Setting Visual C++ Project Properties.
Click the Linker folder.
Click the Input property page.
Modify the Additional Dependencies property.
but the error is still exists.
please help me for this.
To accomplish great things, we must not only act, but also dream;
not only plan, but also believe.
|
|
|
|
|
Hey everybody!
I'm looking for a way to get the motherboard's serial number WITHOUT WMI.
I just can't find it an example code anywhere!
Thx a lot!
|
|
|
|
|
You will essentially need to parse the SMBIOS[^] tables and search for an OEM string (Type 11) as described in the System Management BIOS (SMBIOS) Specification[^] documents.
There is an example of how to read the SMBIOS table here on codeproject:
SMBIOS Peek[^]
This is essentially what WMI is doing at the lower levels to obtain this information.
Best Wishes,
-David Delaune
|
|
|
|
|
Hi ,
I have a VC++ application which is build on Visual studio 2003. I have added couple of dialog boxes in it. In one of my dialog box i have added EditBox control,check box control etc. In the properties page of those controls I can see the TabStop property but no TabIndex is there. Can any one help me how to change the tabindex for those controls.
Thanks in advance....
birajendu
SonicWALL
Bangalore
India
|
|
|
|
|
Do you mean tab order? To set the tab order, go to Format->Tab Order while in the dialog editor.
There is sufficient light for those who desire to see, and there is sufficient darkness for those of a contrary disposition.
Blaise Pascal
|
|
|
|
|
Thank you very much.
But still i am running in to another problem. In that dialog Box i have a tab control and four buttons lets say B1,B2,B3,B4. And in that tab control I have 2 check boxes lets say C1,C2.
I am tring to make the tab order in the following format :Tab->C1->C2->B1->B2->B3->B4.
but currently it is only possible to do Tab->B1->B2->B3->B4->C1->C2.
birajendu
CyberG India
Delhi
India
|
|
|
|
|
Press Ctrl+D and then you can set tab order for your control by click on numbers.
Of one Essence is the human race
thus has Creation put the base
One Limb impacted is sufficient
For all Others to feel the Mace
(Saadi )
|
|
|
|
|
Thank you very much
birajendu
CyberG India
Delhi
India
|
|
|
|
|
I want my SDI application to get maximized as i run it, without clicking the miximized button.Please anyone help to solve this issu.
kkkljj
|
|
|
|
|
See ShowWindow()[^] API.
It is a crappy thing, but it's life -^ Carlo Pallini
|
|
|
|
|
Thanks u for helping me resolving the issue.
kkkljj
|
|
|
|
|
hello all,
void *p is structure data and i need to split and copy them to another array.
After 3 byte i need to copy them to other array as i need to send them on tcp socket.
void dumpHex ( void *p, size_t size )
{
//int *list = malloc(n* sizeof(int));
unsigned char *bytes = (unsigned char *)p;
for (size_t i = 0 ; i < size ; i++ )
{
unsigned int b = bytes[i];
if (b>3)
{
printf(" i=%d 0x%02x \n",i,(char*)bytes[i]);
}
}
}
regards
Jalsa
|
|
|
|
|
jalsa G wrote: After 3 byte i need to copy them to other array as i need to send them on tcp socket.
Why? cannot you send the bytes directy?
And...Uhm...What is your question?
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]
|
|
|
|
|
hi sir,
Thanks for the reply
i am sending data over tcp socket so before sending i need to recalculate tcp checksum using md5.
so the structure data has to be split and divided header and data separately.
header is consist of 38 bytes and other data is message data.
so i am trying to split the structure data using below code
#include "stdafx.h"
#include <string.h>
#include <malloc.h>
struct Test
{
int sno;
char name[24];
int rno;
} testexmp;
unsigned long int x;
void dumpHex ( void *p, size_t size )
{
//int *list = malloc(n* sizeof(int));
unsigned char *bytes = (unsigned char *)p;
for (size_t i = 0 ; i < size ; i++ )
{
unsigned int b = bytes[i];
if (b>3)
{
printf(" i=%d 0x%02x \n",i,(char*)bytes[i]);
}
}
}
int main(int argc, char* argv[])
{
printf("size of the test structure is %d \n",sizeof(testexmp));
testexmp.sno=1;
strcpy(testexmp.name,"testsample");
testexmp.rno=10;
//here i split the data but i am unable to store them into other array
dumpHex(&testexmp,sizeof(testexmp));
printf("sno is %d \n",testexmp.sno);
printf("name is %s \n",testexmp.name);
printf("roll no is %d \n",testexmp.sno);
return 0;
}
Jalsa
|
|
|
|
|
jalsa G wrote: i am sending data over tcp socket so before sending i need to recalculate tcp checksum using md5.
Why ? Everything is handled internally so the only thing you have to do is send your structure. Just pass the address of the structure instance to the send function and specify sizeof(Test) as the lenght of the data.
|
|
|
|