|
That's how things are. I found this out a while back while using GetCursor() in Win32. There might be an easy way around this, but I don't know of one.
"Blessed are the peacemakers, for they shall be called sons of God." - Jesus
"You must be the change you wish to see in the world." - Mahatma Gandhi
|
|
|
|
|
After some extensive digging, i found out that to get the cursor "image" or icon, we need to use GetCursorInfo() but i don't know how to write the codes (particularly the dllimport part) and get it working in C#. Does anyone have any ideas?
|
|
|
|
|
//----------------------------------------------------------------------------
// 4.2 How to Implement Functors
// abstract base class
class TFunctor
{
public:
// two possible functions to call member function. virtual cause derived
// classes will use a pointer to an object and a pointer to a member function
// to make the function call
virtual void operator()(const char* string)=0; // call using operator
virtual void Call(const char* string)=0; // call using function
};
// derived template class
template <class tclass=""> class TSpecificFunctor : public TFunctor {
private:
void (TClass::*fpt)(const char*); // pointer to member function
TClass* pt2Object; // pointer to object
public:
// constructor - takes pointer to an object and pointer to a member and stores
// them in two private variables
TSpecificFunctor(TClass* _pt2Object, void(TClass::*_fpt)(const char*))
{ pt2Object = _pt2Object; fpt=_fpt; };
// override operator "()"
virtual void operator()(const char* string)
{ (*pt2Object.*fpt)(string);}; // execute member function
// override function "Call"
virtual void Call(const char* string)
{ (*pt2Object.*fpt)(string);}; // execute member function
};
//----------------------------------------------------------------------------
// 4.3 Example of How to Use Functors
// dummy class A
class TClassA{
public:
TClassA(){};
void Display(const char* text) { cout << text << endl; };
/* more of TClassA */
};
// dummy class B
class TClassB{
public:
TClassB(){};
void Display(const char* text) { cout << text << endl; };
/* more of TClassB */
};
// main program
int main(int argc, char* argv[])
{
// 1. instantiate objects of TClassA and TClassB
TClassA objA;
TClassB objB;
// 2. instantiate TSpecificFunctor objects ...
// a ) functor which encapsulates pointer to object and to member of TClassA
TSpecificFunctor<tclassa> specFuncA(&objA, TClassA::Display);
// b) functor which encapsulates pointer to object and to member of TClassB
TSpecificFunctor<tclassb> specFuncB(&objB, &TClassB::Display);
// 3. create array with pointers to TFunctor, the base class and ...
TFunctor** vTable = new TFunctor*[2];
// ... assign functor addresses to the function pointer array
vTable[0] = &specFuncA;
vTable[1] = &specFuncB;
// 4. use array to call member functions without the need of an object
vTable[0]->Call("TClassA::Display called!"); // via function "Call"
(*vTable[1]) ("TClassB::Display called!"); // via operator "()"
// 5. release
delete[] vTable;
// hit enter to terminate
cout << endl << "Hit Enter to terminate!" << endl;
cin.get();
return 0;
}
Can you tell me the underlined sentences' meaning?
Thank you!
|
|
|
|
|
|
The problems are:
1.virtual void operator()(const char* string)=0; // call using operator
2.template class TSpecificFunctor : public TFunctor
//TFunctor is a class
3.TSpecificFunctor specFuncA(&objA, TClassA::Display);
4.TFunctor** vTable = new TFunctor*[2];
Can you tell me their meaning?
Thank you again
The following codes you can refer:
// This code was compiled and tested with Borland C++ Builder 5.0. Let me know
// if there is something I should mention for the use with other compilers.
#pragma hdrstop // Borland C++ Builder specific
#pragma argsused // do.
#include // due to: cout
// abstract base class
class TFunctor
{
public:
// two possible functions to call member function. virtual cause derived
// classes will use a pointer to an object and a pointer to a member function
// to make the function call
virtual void operator()(const char* string)=0; // call using operator
virtual void Call(const char* string)=0; // call using function
};
// derived template class
template class TSpecificFunctor : public TFunctor
{
private:
void (TClass::*fpt)(const char*); // pointer to member function
TClass* pt2Object; // pointer to object
public:
// constructor - takes pointer to an object and pointer to a member and stores
// them in two private variables
TSpecificFunctor(TClass* _pt2Object, void(TClass::*_fpt)(const char*))
{ pt2Object = _pt2Object; fpt=_fpt; };
// override operator "()"
virtual void operator()(const char* string)
{ (*pt2Object.*fpt)(string);}; // execute member function
// override function "Call"
virtual void Call(const char* string)
{ (*pt2Object.*fpt)(string);}; // execute member function
};
//-----------------------------------------------------------------------------------------
// 4.3 Example of How to Use Functors
// dummy class A
class TClassA{
public:
TClassA(){};
void Display(const char* text) { cout << text << endl; };
/* more of TClassA */
};
// dummy class B
class TClassB{
public:
TClassB(){};
void Display(const char* text) { cout << text << endl; };
/* more of TClassB */
};
// main program
int main(int argc, char* argv[])
{
// 1. instantiate objects of TClassA and TClassB
TClassA objA;
TClassB objB;
// 2. instantiate TSpecificFunctor objects ...
// a ) functor which encapsulates pointer to object and to member of TClassA
TSpecificFunctor specFuncA(&objA, TClassA::Display);
// b) functor which encapsulates pointer to object and to member of TClassB
TSpecificFunctor specFuncB(&objB, &TClassB::Display);
// 3. create array with pointers to TFunctor, the base class and ...
TFunctor** vTable = new TFunctor*[2];
// ... assign functor addresses to the function pointer array
vTable[0] = &specFuncA;
vTable[1] = &specFuncB;
// 4. use array to call member functions without the need of an object
vTable[0]->Call("TClassA::Display called!"); // via function "Call"
(*vTable[1]) ("TClassB::Display called!"); // via operator "()"
// 5. release
delete[] vTable;
// hit enter to terminate
cout << endl << "Hit Enter to terminate!" << endl;
cin.get();
return 0;
}
|
|
|
|
|
Aleon666 wrote:
virtual void operator()(const char* string)=0; // call using operator
This is an abstract virtual function. The class containing an abstract virtual function cannot be instantiated, and is intended to be a base class.
Aleon666 wrote:
template class TSpecificFunctor : public TFunctor
I guess this should look like this:
template<class TClass> class TSpecificFunctor : public TFunctor
This is a declaration of a template class. I think you better read on templates in MSDN.
Aleon666 wrote:
TSpecificFunctor specFuncA(&objA, TClassA::Display);
I again guess it should be:
TSpecificFunctor<TClassA> specFuncA(&objA, TClassA::Display);
This line creates an instance of TSpecificFunctor object, passing TClassA as a template argument, and (&objA, TClassA::Display) as constructor arguments.
Aleon666 wrote:
TFunctor** vTable = new TFunctor*[2];
This creates an array which contains two pointers to TFunctor objects. This array is then initialized with two created functors: specFuncA and specFuncB .
HTH
Alexandre Kojevnikov
MCAD charter member
Leuven, Belgium
|
|
|
|
|
|
Hi! Is it possible for a method to return a struct? like:
Thanks!
If not, how do i make a method return data with multiple data types?
Thanks again!
"To teach is to learn twice"
|
|
|
|
|
daljv wrote:
Is it possible for a method to return a struct?
Yes
struct Data
{
int i;
string bar;
}
public Data DoStuff()
{
Data d = new Data();
d.i = 1;
d.bar = "Hello";
return d;
} Something like that will work
James
"I despise the city and much prefer being where a traffic jam means a line-up at McDonald's"
Me when telling a friend why I wouldn't want to live with him
|
|
|
|
|
You beat me to it by a minute
*goes back to work*
|
|
|
|
|
But yours will compile
James
"I despise the city and much prefer being where a traffic jam means a line-up at McDonald's"
Me when telling a friend why I wouldn't want to live with him
|
|
|
|
|
hehehe..
|
|
|
|
|
While your example struct seems to be missing, the answer is yes. A method can return void or any object you want it to - naturally this includes your own structs and classes.
In this example I'll create a struct to hold an error message (MyError) and use MyMethod to return it:
public struct MyError<br />
{<br />
public bool HasErrors;<br />
public string ErrorMessage;<br />
<br />
public MyError(bool hasErrors, string errorMessage)<br />
{<br />
HasErrors = hasErrors;<br />
ErrorMessage = errorMessage;<br />
}<br />
}
and now a method that returns it:
public class MyClass<br />
{<br />
public MyError CheckForErrors(bool someCondition)<br />
{<br />
if(!someCondition)<br />
{<br />
return new MyError(true, "Errors ocurred");<br />
}<br />
else<br />
{<br />
return new MyError(false, "She's Apples Mate");<br />
}<br />
}<br />
}
|
|
|
|
|
lol, leave it to me to forget the important things, like visibility modifiers
James
"I despise the city and much prefer being where a traffic jam means a line-up at McDonald's"
Me when telling a friend why I wouldn't want to live with him
|
|
|
|
|
I'm back at work, really
|
|
|
|
|
yep. thanks a lot. Thats a very good explanation.
"To teach is to learn twice"
|
|
|
|
|
the problem is when i draw a column using the Rect method at for example x = 10 y = 10
and i print the text inputting these same values ...but the text is printed at the left ...i want it to be printed on the right ...like right align..Thanks
|
|
|
|
|
When you use the DrawString method you should specify a StringFormat object with the Alignment property set to StringAlignment.Far .
I think that will do what you want.
James
"I despise the city and much prefer being where a traffic jam means a line-up at McDonald's"
Me when telling a friend why I wouldn't want to live with him
|
|
|
|
|
I got some info that might help u guys ..remeber i said my accounting software was throwing a clr exception 80004005 and crashes ...well it happens when u execute it with the Compatability set to windows98/me or simply by executing the programm on a win9x box..I just found out that all my C# programms give the same error !!! Thats preetty confusing to me ..It means my compiler is giving me the problem ??
Might be u guys can help me out on that !!;)
|
|
|
|
|
Confuses the heck out of me also. All my c# apps crash when compatibily is set to 98
|
|
|
|
|
what i ment was the compatability option for windowsXP . When trying to run the app under the win9x/me option it crashs ..
|
|
|
|
|
Yeah - i know. Exactly that.
Well it doesn't really matter much for me anyway.
|
|
|
|
|
I'm going to release an application with multiple customized versions. When the user inserts the CD into the drive I need a .net application to be able to run automatically. Of course this is not going to work if the framework is not installed. Does anyone know of a way of running a .net application without the framework? Something like static linking in MFC?
There must be a solution to this. (Other than installing the framework)
|
|
|
|
|
You have to make a C++ program as an autorun app, not a C# application.
"Blessed are the peacemakers, for they shall be called sons of God." - Jesus
"You must be the change you wish to see in the world." - Mahatma Gandhi
|
|
|
|
|
I'm think i might have to, but I was really hoping i could do it my way in C#
|
|
|
|