|
krmed wrote: Many users call GetLastError after calling other methods that don't set it unless there's an error.
Yes, but there are those crafty API calls that will do stuff like this.
krmed wrote: Sorry about that.
No problem.
“Follow your bliss.” – Joseph Campbell
|
|
|
|
|
Been There, (actualy, Is part of the function the details of which I spared the Details, and covered by a comment)
GetLastError() returns 0!
Regards
Bram van Kampen
|
|
|
|
|
Rajesh R Subramanian wrote: Well, the call won't fail (the return value won't be NULL). It rather returns a handle to the existing mutex object. However, if you make an immediate call to GetLastError() (which you should do), you'd see that the error code has been set to ERROR_ALREADY_EXISTS.
Well, for you who needs an explanation, By 'Not Fail' I mean Did as Documented.
Why do you respond twice to this post!
Bram van Kampen
|
|
|
|
|
Bram van Kampen wrote: Why do you respond twice to this post!
Who responded twice to any post? I see everyone has responded only once (except you have responded twice to my answer)!
I'd like to know if that's your vote on my post?
“Follow your bliss.” – Joseph Campbell
|
|
|
|
|
Hi,
Appologies,
My Fault!
Bram van Kampen
|
|
|
|
|
Bram van Kampen wrote: CString AppName=GetAppNameRoot();
Are you sure this function always returns the same value, as you are using it as part of the mutex name?
|
|
|
|
|
Yes, It does!
It Calls GetModuleHandle(NULL)
ASSERTS (at this Stage that the ModuleHandle is 0x00400000)
Cals GetModuleFileName()
The Result is Stripped to remove up to the 'last '\', and the first '.' thereafter. This function is Also in the same DLL, I got it to print it's name to a DBG Text File,The printed name is always 'MyApp'.
When I trace into the DLL, the Name is Correct, and a New Mutex is created, regardless of the old one. When I move the file back to the App, it works a advertised.
Thanks
Bram van Kampen
|
|
|
|
|
I noticed yesterday some remarks in the MSDN document about creating the MUTEX in local or global space. You may want to check that you are doing it according to those rules.
|
|
|
|
|
Take care if you place it in a DLL you have to distinguish action done in the DLL:
BOOL WINAPI DllMain(
HINSTANCE hinstDLL, // handle to DLL module
DWORD fdwReason, // reason for calling function
LPVOID lpReserved // reserved
)
{
BOOL fInit = FALSE;
WORD wVersionRequested;
WSADATA wsaData;
// Register the log
switch( fdwReason )
{
case DLL_PROCESS_ATTACH:
...
case DLL_THREAD_ATTACH:
...
case DLL_THREAD_DETACH:
...
case DLL_PROCESS_DETACH:
...
};
What is the goal of your mutex ?
Prevent multiple loads of the DLL or block for security reasons ?
Tell me more...
|
|
|
|
|
Hi
Migounette wrote: What is the goal of your mutex ?
Prevent multiple loads of the DLL or block for security reasons ?
Tell me more...
The Goal is to ensure that at most one copy each of a suite of four apps is running per machine. A function 'OnceOnly()' is exported from the DLL. So, instead of the function 'OnceOnly()' being separately included in each of the Apps, it was moved to the DLL which contains the 'Common' Code for the Apps.
The Full Code for OnceOnly() is:-
<br />
DLLEXPORT void OnceOnly(){<br />
CString AppName=GetAppRootName();<br />
CString MutexName=AppName+SG_UID;<br />
<br />
HANDLE exclusion = CreateMutex(NULL, FALSE, MutexName);<br />
DWORD err = ::GetLastError();<br />
if(err != 0){<br />
if(err == ERROR_ALREADY_EXISTS){<br />
CString Message;<br />
Message.Format("There is already an Instance of '%s' Running on This Computer\n\n"<br />
"Activate the Existing Instance instead",(LPCSTR)AppName);<br />
AfxMessageBox(Message);<br />
exit(0);<br />
}<br />
else{<br />
AfxMessageBox("An Error occurred whilst checking that No other instance of\n"<br />
"this program is running\n");<br />
exit(-1);<br />
}
}<br />
Thanks
Bram van Kampen
|
|
|
|
|
Dear All,
I am still new in c++
i would like to implement this class
how??
void main()
}
;(A a1(1,1
;(A a3(2,2
;(A a3(0,0
a3=a1+a2;
++ a1
() a3.out
a3=a1-a3
{() a3.out
Yes. CreatiVity withOuT limiTs
modified on Friday, December 11, 2009 3:57 PM
|
|
|
|
|
This doesn't look like C++ to me.
|
|
|
|
|
its like procedure must be implemnt in c++
Yes. CreatiVity withOuT limiTs
|
|
|
|
|
I think he want's to port it over to C++, or maybe it's some sort of class diagram outlining functionality...
|
|
|
|
|
Do you want to convert ASCII-art into C++ code?
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]
|
|
|
|
|
yes, and without limits please.
|
|
|
|
|
#include <iostream>
using namespace std;
class A
{
private:
int x;
int y;
public:
A()
{
x = 0;
y = 0;
}
A(int First, int Second)
{
x=First;
y=Second;
}
// Opertator
// A operator= ( A &oA);
A operator- ( A oA);
A operator+ ( A oA);
A& operator++(int unu); // prefix
int GetMyX() { return x; }
int GetMyY() { return y; }
void SetMyX(int Xvalue)
{
x=Xvalue;
}
void SetMyY(int Yvalue)
{
y=Yvalue;
}
void Out()
{
cout<<"Value Of x:" << GetMyX()<<" "<<"Value Of y:"<<GetMyY()<<endl ;
}
};
A A:: operator- (A oA)
{
oA.SetMyX (oA.GetMyX ()-x);
oA.SetMyY (oA .GetMyY ()-y);
return oA;
}
A A::operator+ (A oA)
{
oA.SetMyX (oA.GetMyX ()+x);
oA.SetMyY (oA .GetMyY ()+y);
return oA;
}
A& A::operator++(int temp)
{
SetMyX (GetMyX ()+1);
SetMyY (GetMyY ()+1);
return *this;
}
int main()
{
using namespace std;
A a1(2,4);
A a2(3,6);
A a3(0,0);
a1++;
a1.Out ();
a3=a1+a2;
a3.Out ();
a3=a1-a3;
a3.Out ();
int x;
cin>>x;
return 0;
}
Yes. CreatiVity withOuT limiTs
|
|
|
|
|
Is there a question in there? It's just a bunch of code although it does look like C++ this time.
You measure democracy by the freedom it gives its dissidents, not the freedom it gives its assimilated conformists.
|
|
|
|
|
Could you at least be bothered to fix this so it is legible? Did you use the Preview button before posting?
"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
|
|
|
|
|
Hi,
It is a code for a robot i want code take vedio from usb cam and make it frams(pics) as i could use it later @ another code the code is in C++ i found one but there is a compiler error it is little but i canot fixed it
#include "stdafx.h"
#include "cv.h"
#include "highgui.h"
IplImage* src = NULL;
int _tmain(int argc, _TCHAR* argv[])
{
int key;
CvCapture* capture = NULL;
if(NULL==(capture = cvCaptureFromCAM(-1)))
{
printf("\nError on cvCaptureFromCAM");
return -1;
}
cvNamedWindow("Capture", CV_WINDOW_AUTOSIZE);
cvNamedWindow("Capture2", CV_WINDOW_AUTOSIZE);
cvMoveWindow("Capture", 50, 50);
cvMoveWindow("Capture2", 320, 50);
for(;;){
if(NULL==(src=cvQueryFrame(capture))){
printf("\nError on cvQueryFrame");
break;
}
cvShowImage("Capture", src);
key = cvWaitKey(10);
if(key==0x1b)
break;
}
cvReleaseCapture(&capture);
cvDestroyWindow("Capture");
return 0;
}
|
|
|
|
|
It's hard to tell what the problem is. Where are the "cv.h" and "highgui.h" files? Can you post the complete error message here?
|
|
|
|
|
highgui.h and cv.h are headers from the openCV[^] library.
Asmaa, if there is a compile error you will need to tell us what it is. We aren't psychic.
|
|
|
|
|
What is the compiler error? No one is going to type in your code and try to compile it.
You measure democracy by the freedom it gives its dissidents, not the freedom it gives its assimilated conformists.
|
|
|
|
|
do you have opencv installed on your system?
if(no){install opencv;}
add opencv include and source directories to your compiler setting and at the end
add the libraries in your project setting
|
|
|
|
|
example:
double 5 cover to '5'.
|
|
|
|