|
->Yes, you may also override the MyStruct's default constructor to take care about.
Yes, i know
By reading and writing answers, i am thinking more and more that this is a good solution and not a bad solution.
I was dreaming of an easy way like this:
void func(mystruct *ms=NULL);
But maybe this will stay a dream
Thanks a lot for your time.
|
|
|
|
|
Wischkony wrote: void func(mystruct *ms=NULL);
Well, you have also that option.
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]
modified on Monday, December 15, 2008 11:53 AM
|
|
|
|
|
It should work the same way. What error are you getting that it doesn't?
|
|
|
|
|
Oh, okay,...
void func(myStruct *ms);
works fine.
But with:
void func(myStruct *ms=NULL);
i got the error C2143: Syntax error: missing ')' before '='
Maybe i am totaly wrong, but i think, i got the error because setting a default value for a struct can not be done so easy.
|
|
|
|
|
Wischkony wrote: Maybe i am totaly wrong, but i think, i got the error because setting a default value for a struct can not be done so easy.
It has nothing to do with it being a struct . It has to do with the file having a .c extension.
"Love people and use things, not love things and use people." - Unknown
"The brick walls are there for a reason...to stop the people who don't want it badly enough." - Randy Pausch
|
|
|
|
|
i have to apologize to all here trying help me.
I was running for hours against a wall.
i tried the following:
void func(mystruct *ms=NULL);
and got an error, so thought this is not possible!!
But it is possible, with:
void func(mystruct *ms);
void func(mystruct *ms=NULL)
{
...
}
I am sry,...aeh this is embarrasing...
|
|
|
|
|
Wischkony wrote: I am sry,...aeh this is embarrasing...
Heh. No problem.
No better way to find silly mistakes and easy solutions than putting it out there for
the world to see
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Hi,
How can I used DeviceIoControl with FSCTL_GET_VOLUME_BITMAP to get list of free cluster of file system.
Please give any link related to this.
|
|
|
|
|
|
Hello everyone,
I am developing a DLL and making another console application to link with the DLL. The DLL expose type CFoo, create an instance and the application consumes it. There is error like this. The source code of DLL and main are listed below, any ideas?
1>main.obj : error LNK2001: unresolved external symbol "class CFoo foo" (?foo@@3VCFoo@@A)
foo.h (defines exposed type in the DLL)
class __declspec (dllexport) CFoo
{
public:
CFoo();
int foo1();
int foo2();
};
dllmain.cpp (defines type implementation inside dll)
#include "foo.h"
CFoo::CFoo()
{
return;
}
int CFoo::foo1()
{
return 100;
}
int CFoo::foo2()
{
return 200;
}
CFoo foo;
main.cpp (the console application which dynamically links with the DLL using import library)
#include "foo.h"
extern CFoo foo;
int main()
{
int i = foo.foo1();
i = foo.foo2();
return 0;
}
thanks in advance,
George
|
|
|
|
|
George_George wrote: extern CFoo foo;
Replace the above by -
CFoo foo2;
|
|
|
|
|
I am confused, nbugalia! In my design, I want to create object instance in DLL and access the object instance from the hosting executable from extern reference. Your code change impacts my design...
Any comments?
regards,
George
|
|
|
|
|
Here is the Dll file code -
foo.h
class __declspec (dllexport) CFoo
{
public:
CFoo();
int foo1();
int foo2();
};
__declspec (dllexport) CFoo foo;re>
Foo.cpp
<pre>#include "Foo.h"
CFoo::CFoo()
{
return;
}
int CFoo::foo1()
{
return 100;
}
int CFoo::foo2()
{
return 200;
}
and here is the console based application code -
Foo.h
class __declspec (dllimport) CFoo
{
public:
CFoo();
int foo1();
int foo2();
};
__declspec (dllimport) CFoo foo;
test.cpp
#include "foo.h"
int main()
{
int i = foo.foo1();
i = foo.foo2();
return 0;
}
Don't forget to set the dependency to Foo.lib file in the test project settings.
Hope this will help.
|
|
|
|
|
Cool, nbugalia!
I want to confirm with you that we could expose, function/class/global variable from a DLL, correct?
regards,
George
|
|
|
|
|
George_George wrote: CFoo foo;
This is not enough, you have to export the foo variable, like
__declspec (dllexport) CFoo foo;
George_George wrote: extern CFoo foo;
Also in the exe, you have to import the variable
__declspec (dllimport) CFoo foo;
|
|
|
|
|
Thanks nave,
I have tested your solution works. My question is, if I create a global variable inside a DLL, then in the hosting executable, could I use extern to refer to the variable and use it?
regards,
George
|
|
|
|
|
George_George wrote: could I use extern to refer to the variable and use it?
No. you should export it to use the variable in the hosting executable..
|
|
|
|
|
Thanks nave,
So, from learning from you, it is legal to expose both function/global variable/class from a DLL?
(previously, I think only expose function is allowed.)
regards,
George
|
|
|
|
|
George_George wrote: So, from learning from you, it is legal to expose both function/global variable/class from a DLL?
Yes its legal to expose both functions and variables.
|
|
|
|
|
Thanks nave,
And also legal for exposing class?
regards,
George
|
|
|
|
|
Of course classes also
|
|
|
|
|
Thanks Naveen!
I have proved we could expose both class and global variable by DLL and using your mentioned elegant way.
But I am not 100% confident. Here is my code, could you have a code review please?
DLL Part:
#ifdef _DLLPROJ_
#define DLLEXP __declspec (dllexport)
#else
#define DLLEXP __declspec (dllimport)
#endif
DLLEXP class CFoo
{
public:
DLLEXP int foo1();
DLLEXP int foo2();
};
DLLEXP class CFooImpl : CFoo
{
public:
DLLEXP CFooImpl();
DLLEXP int foo1();
DLLEXP int foo2();
};
#include "foo.h"
CFooImpl::CFooImpl()
{
return;
}
int CFooImpl::foo1()
{
return 100;
}
int CFooImpl::foo2()
{
return 200;
}
DLLEXP CFooImpl foo;
Hosting client part
#include "foo.h"
DLLEXP CFooImpl foo;
int main()
{
CFooImpl foo1;
int i = foo.foo1();
i = foo.foo2();
return 0;
}
regards,
George
|
|
|
|
|
I have noted the below problem
George_George wrote: DLLEXP class CFoo
This should be modified as class DLLEXP CFoo
everthing else seems ok.
|
|
|
|
|
I think they should be the same? It compiles and runs well in VS.
regards,
George
|
|
|
|
|
Aside from the issue Naveen showed you, IIRC you don't need to DLLEXP the class and the classes methods - one or the other, that's all that's needed really. I tend to DLLEXP the methods, as you have better control over what precisely is exported.
|
|
|
|