|
Bram van Kampen wrote: prefix it with the '__inline' directive.
While this will work it's not the best choice. From MSDN:
Microsoft Specific
The __inline keyword is equivalent to inline.
But inline is standard whereas __inline is not, so a better choice is to use inline . The only reason to prefer __inline over inline is that __inline works in C code.
Steve
|
|
|
|
|
hmmm,
Never knew that, but, as they say, one lives and learns.
thanks for pointing this out to me though.
regards
Bram van Kampen
|
|
|
|
|
> This will happen if the header file is included in more than one cpp file.
But... Ooo... I understand now... thanks.
> (although I don't know why you should want to do this)
I writting a dll interface and I need put some function in headers files to
give probability to write some customs classes for other people.
I need to change my project now...
> Hope this explains the issue.
Yes, thanks.
Regards.
|
|
|
|
|
Ok, in true this is my problem....
#ifndef __A_H_INCLUDE__
#define __A_H_INCLUDE__
class B;
class A
{
public:
A( B* b )
: bb( b )
{
}
virtual void foo();
};
void A::foo()
{
bb->fuu( this );
}
#endif
#ifndef __B_H_INCLUDE__
#define __B_H_INCLUDE__
#include "A.h"
class B : public A
{
public:
B( B* b )
: A( b )
{
}
virtual void fuu( A* a)
{
// do with a...
}
};
#endif
I need to break this depedency problem... and
my way is not works.
|
|
|
|
|
Member 4608927 wrote: void A::foo()
{
bb->fuu( this );
}
Member 4608927 wrote: virtual void fuu( A* a)
{
// do with a...
}
Remove these from the Header File and put in a separate CPP File.
Regards,
Bram van Kampen
|
|
|
|
|
Bram van Kampen wrote: Remove these from the Header File and put in a separate CPP File.
I can not do that. This is dll header file... I didn't see any dll heders with cpp file.
|
|
|
|
|
Bram van Kampen wrote: Remove these from the Header File and put in a separate CPP File.
I can not do that. This is dll header file... I didn't see any dll headers files with cpp file.
|
|
|
|
|
Member 4608927 wrote: I can not do that. This is dll header file... I didn't see any dll headers files with cpp file.
? ? ?
A few questions before we proceed further.
Do you have the code to (re)compile the DLL ? Did you write it yourself ? Is the header file the same as the one used to compile the DLL?
Bram van Kampen
|
|
|
|
|
Hello,
I sent to you email by codeproject but probably you did not get it. Ok.
Yes, I have the code to compile the dll
Yes, I wrote this dll this is my own code.
Yes the header files are that same as the one used to compile the dll.
If you want I can send to you some files from my dll. Our talk will be
simpler if you can see some code. My email is "gaspode(O)wp,pl".
Thanks, by.
|
|
|
|
|
Well, in that case you have No Problem. Proceed as Follows:-
Step 1:
Create a New CPP File, and add it to your project.
Step 2:
Write the Following in the CPP File:
#include "stdafx.h"
#include "MyDll.h"// The Header in Question.
Step 3:
Cut the function bodies out of the Header, and Paste in the New Cpp File. (Leave the Declarations)
Step4:
Complete the two function definitions to read:-
void __declspec(dllexport A::foo(){ // Body;}
void __declspec(dllexport) B::fuu(){ // Body;}
Compile this, and link it, and Bob's your Uncle!
Please try this.
Regards,
Bram van Kampen
|
|
|
|
|
Lake this...
This a header file of dll
#ifndef __A_H_INCLUDE__
#define __A_H_INCLUDE__
class B;
class A
{
public:
A( B* b )
: bb( b )
{
}
virtual void __declspec(dllexport)foo();
};
#endif
In the project of my dll
A.cpp file
void __declspec(dllexport)A::foo()
{
bb->fuu( this );
}
Yes? Do I understand you?
modified on Thursday, July 3, 2008 3:08 PM
|
|
|
|
|
Yes, Nearly Correct.
Sorry, some of it is my fault.
In your declaration of the class, you use __declspec(dllexport). That's fine for the building of the .dll. However, when it comes to Using the dll, it should read __declspec(dllimport).
Typically you use a macro for this:-
(I would put it in "StdAfx.h")
#ifdef BUILD_DLL
#define LINKAGE __declspec(dllexport)
#else
#define LINKAGE __declspec(dllimport)
#endif
When you build the DLL you define the Symbol BUILD_DLL in your Project Settings.
Then in your Header File:
{
void LINKAGE foo();
}
Actually, if you have the __declspec() in your header, same is obsolete in the CPP File. (my Fault in sending you astray here)
Apart from that, that's how it's done.
BTW, Everything that you want to be visible outside the DLL must have such __declspec() attached.
Bram van Kampen
|
|
|
|
|
#ifdef BUILD_DLL
#define LINKAGE __declspec(dllexport)
#else
#define LINKAGE __declspec(dllimport)
#endif
Yes, yes... I didn't write that but I know that... I use some think like that in my project.
I can not do that in this way that you propose. If I do that I will need to edit about teen files... this is to much work for me and doesn't look good. But your idea is very good... I learnt a lot from you.
I found another way to resolve my problem.
#ifndef __A_H_INCLUDE__
#define __A_H_INCLUDE__
class B;
class A
{
friend D;
public:
A( B* b )
: bb( b )
{
}
virtual void foo()
{
if ( d )
d->foo( bb, this );
}
protected:
D *d;
B *bb;
};
#endif
This some kind of delegation I think. Delegation is a idiom of C++ and that is ok. D class is not a stupid class hire. D class has a some sense. Do you like this idea? Is this good and look for professional code? I need to delegate about seven function.
Regards.
|
|
|
|
|
"
#ifdef BUILD_DLL#define LINKAGE __declspec(dllexport)#else#define LINKAGE __declspec(dllimport)#endif
Yes, yes... I didn't write that but I know that... I use some think like that in my project.
I can not do that in this way that you propose. If I do that I will need to edit about teen files... this is to much work for me and doesn't look good. But your idea is very good... I learnt a lot from you.
"
I found another way to resolve my problem.
Thats's Good,
I hope you learned from the experience. I also hope that you learned to state a problem consisely on the project. You started off with a Non Starter Concept in that DLL Header files are different from Ordinary Header Files. They are NOT. Had you not tried to fly in the face of reason, and stated your problem more clearly, it would not have taken the resources expended to formulate an answer.
Bram van Kampen
|
|
|
|
|
Member 4608927 wrote: I writting a dll interface and I need put some function in headers files to
give probability to write some customs classes for other people.
No such need at all! just keep these functions in a cpp file and export them. Works all the time. The custom classes should be derived from your base classes in the DLL. It would be bad practice to try to do things by modifying your DLL header to customise things.
regards
Bram van Kampen
|
|
|
|
|
You are violating the One Definition Rule (ODR)[^]. There are three ways around this:
The first is to move the function definition into the class definition (such functions are implicitly inline ):
class A
{
public:
virtual void foo()
{
}
};
The second is to add the inline keyword to the function definition in your code as is:
class A
{
public:
virtual void foo();
};
inline void A::foo()
{
}
The third is to move the definition of the member function into a .CPP file:
class A
{
public:
virtual void foo();
};
void A::foo()
{
}
Also note that it's pointless to use the inline keyword on virtual functions as virtual functions need an address to put in the vtable[^] and thus will not be inlined anyway.
|
|
|
|
|
Hi,
I am using the IXMLDOM objects to create an xml file and write tags to this file.
I would like to create a tag <children count="2">, and under that write the names of the children <childname> value </childname>.
this should look as folowing:
<Root>
<Person>
<Name> value </Name>
<PhoneNumber> value </PhoneNumber>
<Children count = 2>
<childName> value </childName>
<childName> value </childName>
</Children>
</Person>
</Root>
1. Using IXMLDOMDocument or IXMLDOMNode, how do I add a node <Children count =2>, is this an attribute? How do I make sure that it is inserted under the <phonenumber> tag?
2. How do I add the sub nodes underneath <childName> value </childName>
If you could give me code examples tha twould be great.
I've tried all kinds of options using the IXMLDOM functiom and it doesn't work!!
Thanks.
modified on Tuesday, July 1, 2008 12:51 PM
|
|
|
|
|
SWDevil wrote: I've tried all kinds of options using the IXMLDOM functiom and it doesn't work!!
Have you tried reading the documentation[^]?
led mike
|
|
|
|
|
umm.. yes...
obviously it did not help much, therfore I wrote this post...
|
|
|
|
|
At the bottom of the page i posted click on the links to createElement and appendChild
led mike
|
|
|
|
|
In MDI Application i want only maximise and close button on my child windows and not minimise button.
I tried diff styles of the window in "PreCreateWindow" function, but i could disable the minimise button but couldnt hide it.
Is it because Window property has this limitation?
Can you please help?
Thanks
Regards,
Jigna
|
|
|
|
|
To my knowledge, it cannot be removed without also removing the entire caption.
"Love people and use things, not love things and use people." - Unknown
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
I am using com dll with some clsid . I do know the source code . is there any way to change the
clsid of this com dll .
Rajesh
|
|
|
|
|
You shouldn't.
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]
|
|
|
|
|
vote 5 for gray man.
|
|
|
|