|
As it is a system administration issue I suppose you'll get better help at the proper forum.
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 all,
when i compile my program i get this error
C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\oleacc.h(53) : error C2872: 'IAccessible' : ambiguous symbol
could be 'C:\Program Files\Microsoft Visual Studio 9.0\VC\atlmfc\include\afxwin.h(1336) : IAccessible'
or 'e:\Program\debug\mso.tlh(2072) : Office::IAccessible'
How can i resolve this
Thanks in advance
|
|
|
|
|
I'm guessing you're automating MS-Office.
If so, use Office::IAccessible .
Otherwise use ::IAccessible .
|
|
|
|
|
this is because IAccessible is declared in both mso.tlh and afxwin.h.
If you want to use IAccessible from mso.tlh, use it as Office::IAccessible.
Or if you need to use IAccessible from afxwin.h, as it doesn't belongs to any namespace there, you have to modify the IAccessible from mso.tlh. You may use,
rename("IAccessible", "msoIAccessible") soon after the #import "....\mso.tlh" statement.
|
|
|
|
|
Hello everybody,
First, thanks in advance to reply my question.
I have (2) threads in my program (MFC) and when I run my program, all operations which I purposed work fine. But the problem is GUI is blocked up, means I cannot click any buttons in the Dialog Box.
Please help if anybody familiar with this issue.
Any helps are appreciated!
BS Mashhur!
|
|
|
|
|
if you're doing work in the main thread and not allowing windows messages to be processed then yes it will lock up and you won't be able to interact with the GUI.
one way to avoid that is to do all your work in the second worker thread and just use the main thread to respond to user inputs and update the UI.
another option is to, while you're doing whatever work you're doing, periodically call the below function.
void RunMessagePump()
{
MSG m;
while (PeekMessage(&m,PM_REMOVE))
{
TranslateMessage(&m);
DispatchMessage(&m);
}
}
So if you're in a tight loop and you call this often your app will remain responsive. The thing to watch out for there though is re-entrance, i.e. the user clicking a button, then while the operation is taking place clicking it again.
|
|
|
|
|
Dear Dave thanks to your answer.
Let me please explain deeper about threads I used in my prog.
1. First, I created a server socket and bind it to a port. All work fine, and then here, thread (hThread1) is created in order to listen coming connection requests from peers. Logically, the thread (hThread1) shouldn't disturb to GUI threads running by default right? But not so, GUI is locked up.
After accepting the client socket, I created another thread (hThread2) for message exchanging process and hThread1 goes to listen port on.
Any ideas?
2. Could you please explain your void RunMessagePump() function in detail?
3. If you have ever used WSAAsyncselect(), could you please tell me how to run it?
Thanks a lot! Sorry I am new at such programming and it is taking a pretty enough time (including your time).
|
|
|
|
|
Hey guys,
I found a solution for my post that I should use asynchronous socket instead. So, could you please send some codes written in MFC for asynchronous socket connection?
What is difficult for me now is how to use the WSAAsyncselect(SOCKET, HWND, UINT, long lEvent) function.
Any help greatly appreciated!
|
|
|
|
|
If you're using MFC, why don't you use the CAsyncSocket[^] class?
|
|
|
|
|
Hi!
I work under Visual C++ 2008 and use the libusb driver and library for windows to communicate with a self-build camera device. The acquired images are transfered via usb bulk transfer and I can collect the data from the endpoint by calling usb_bulk_tranfer function of the libusb library. The transfer rate of the image data is about 12MB per second. Unfortunately, some data gets lost periodically every few milliseconds, probably caused by usb interrupts or something else which has a higher priority. Is there a way to ensure the bulk tranfer by disabling other tranfers or events while images are tranfered via bulk?
Any help is greatly appreciated.
|
|
|
|
|
USB gives least priority to bulk endpoints.
But there should not be any data loss.
Please post some relevant code.
|
|
|
|
|
Hi all, I am writing a console application that now plays .mp3 and PCM wav files. Now I want the application to also read .cdfs audio but I don't know where start. Any detailed tutorials and descriptions will do. I can do it in either C or C++. Thanks.
|
|
|
|
|
Have you tried ffmpeg? Its an open source project with LPGP license. I haven't heard about cdfs, but there's a good chance it's supported.
There is sufficient light for those who desire to see, and there is sufficient darkness for those of a contrary disposition.
Blaise Pascal
|
|
|
|
|
Hello,
I run EnumProcesses(), to find if the progam "NurOper.exe" is running I debuged it and although "NurOper.exe" is running its don't return it,
its return all ather programs include my program- "nurman.exe" what can be the resone for it ,I must know if the progam "NurOper.exe" is running in order not to run it twice,
thank for advance .
the code is:
bool IsRunning=false;
int num=0;
DWORD aProcesses[1024], cbNeeded, cProcesses;
ULONG lCpuusage = 0;
UINT index;
double percent;
if ( !EnumProcesses( aProcesses, sizeof(aProcesses),&cbNeeded ) )
return false;
// Calculate how many process identifiers were returned.
cProcesses = cbNeeded / sizeof(DWORD);
CString str;
for (int i = 0; i < cProcesses; i++ )
if( aProcesses[i] != 0 )
{
TCHAR szProcessName[MAX_PATH] = TEXT("<unknown>");
// Get a handle to the process.
HANDLE hProcess = OpenProcess( PROCESS_QUERY_INFORMATION |
PROCESS_VM_READ,
FALSE,aProcesses[i] );
// Get the process name.
if (NULL != hProcess )
{
HMODULE hMod;
DWORD cbNeeded;
if ( EnumProcessModules( hProcess, &hMod,sizeofhMod),&cbNeeded))
{
GetModuleBaseName( hProcess, hMod, szProcessName,
sizeof(szProcessName)/sizeof(TCHAR) );
}
}
str=(CString)szProcessName;
// Print the process name and identifier.
if(str.Compare(L"nurman.exe")==0 )
if(num==0)
num=1;
else if(num==1)
exit(1);
if(str.Compare(L"NurOper.exe")==0 )
IsRunning=true;
CloseHandle( hProcess );
}
if(!IsRunning)
_beginthread(runExe, 0, (void*)12 );
|
|
|
|
|
|
Why do you think, it was "not returned" ?
virtual void BeHappy() = 0;
|
|
|
|
|
I saved the names of all processes, I debuged it and the names of all ather processes besides "NurOper.exe" were on the array .
|
|
|
|
|
...and "nUrOpEr.exe" - as well ?
I would perform it by the combination of
- Process32First : EXE name stage, and
- Module32First : EXE directory stage
Please see the following example :
bool GetPathFromPID(DWORD dwPID, CString& cszFullName)
{
bool bResult = false;
cszFullName.Empty();
HANDLE hToolHelp = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, dwPID);
if (INVALID_HANDLE_VALUE != hToolHelp) {
MODULEENTRY32 ModuleEntry32;
ModuleEntry32.dwSize = sizeof(MODULEENTRY32);
if (Module32First(hToolHelp, &ModuleEntry32)) {
do {
CString cszModule(ModuleEntry32.szModule);
CString cszExePath(ModuleEntry32.szExePath);
if (0 == cszExePath.Right(cszModule.GetLength()).CompareNoCase(cszModule)) {
cszFullName = cszExePath;
bResult = true;
break;
}
} while (Module32Next(hToolHelp, &ModuleEntry32));
}
CloseHandle(hToolHelp);
}
return bResult;
}
bool GetRunningProcesses(const CString& csDir,
CStringArray& arrProcesse,
CDWordArray& arrProcessID,
DWORD* pdwFoundCount)
{
arrProcesse.RemoveAll();
arrProcessID.RemoveAll();
if (pdwFoundCount) {
*pdwFoundCount = 0;
}
HANDLE hToolHelp = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hToolHelp == INVALID_HANDLE_VALUE) {
return false;
}
PROCESSENTRY32 ProcessEntry32;
ProcessEntry32.dwSize = sizeof(PROCESSENTRY32);
CString cszOurDir(csDir);
cszOurDir.MakeUpper();
if (Process32First(hToolHelp, &ProcessEntry32)) {
do {
if (ProcessEntry32.th32ProcessID) {
CString cszExePath;
if (GetPathFromPID(ProcessEntry32.th32ProcessID, cszExePath)) {
cszExePath.MakeUpper();
if (-1 != cszExePath.Find(cszOurDir)) {
arrProcesse.Add(ProcessEntry32.szExeFile);
arrProcessID.Add(ProcessEntry32.th32ProcessID);
}
}
}
} while (Process32Next(hToolHelp, &ProcessEntry32));
}
CloseHandle(hToolHelp);
if (pdwFoundCount) {
*pdwFoundCount = arrProcessID.GetCount();
}
return true;
}
PS: an administrator only can see the all processes by this code,
other users can see the own (their) processes only...
virtual void BeHappy() = 0;
modified on Monday, September 6, 2010 4:58 AM
|
|
|
|
|
First,thank you for yours helpfull answer,
I would like to ask you how can I have an access to the name of each procces, i.e I need to chack whether certain program is active.
thanks again
|
|
|
|
|
Please see the usage of the field ProcessEntry32.szExeFile in the second function above
virtual void BeHappy() = 0;
|
|
|
|
|
Just a thought, but have you looked at Process32First() and related functions?
|
|
|
|
|
How many processes does Task Manager report? How does that compare to cProcesses ?
"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
|
|
|
|
|
Hello Everybody !
when I call the system font dialog like this,how to set the default font name and size ?
HFONT FAR PASCAL MyCreateFont( void )
{
CHOOSEFONT cf;
LOGFONT lf;
HFONT hfont;
cf.lStructSize = sizeof(CHOOSEFONT);
cf.hwndOwner = (HWND)NULL;
cf.hDC = (HDC)NULL;
cf.lpLogFont = &lf;
cf.iPointSize = 0;
cf.Flags = CF_SCREENFONTS;
cf.rgbColors = RGB(0,0,0);
cf.lCustData = 0L;
cf.lpfnHook = (LPCFHOOKPROC)NULL;
cf.lpTemplateName = (LPSTR)NULL;
cf.hInstance = (HINSTANCE) NULL;
cf.lpszStyle = (LPSTR)NULL;
cf.nFontType = SCREEN_FONTTYPE;
cf.nSizeMin = 0;
cf.nSizeMax = 0;
ChooseFont(&cf);
hfont = CreateFontIndirect(cf.lpLogFont);
return (hfont);
}
Thanks for your reply !
Best Regards !
|
|
|
|
|
It took me 10 seconds to google one word and find the answer, in the form of this sentence:
If you set the ... flag in the Flags member and initialize the other members, the ChooseFont function initializes the dialog box with a font that matches ...
|
|
|
|
|
I'm sorry...
thanks !
|
|
|
|