943,644 Members | Top Members by Rank

Ad:
  • C++ Discussion Thread
  • Unsolved
  • Views: 1740
  • C++ RSS
May 9th, 2008
0

importance of dllexport location in program

Expand Post »
Hi,
(using MS VS2005) Recently I've found that in order for a function to be exported, dllexport *must* be placed in the same file of the function body. E.g. see the following case:

File a.cpp

C++ Syntax (Toggle Plain Text)
  1. void dllexport a();
  2.  
  3. a();

File b.cpp

C++ Syntax (Toggle Plain Text)
  1. void a()
  2. {
  3. // function body
  4. }

Now, a.cpp and b.cpp compile perfectly into a dll. However a() is not exported.
From what I understand from MSDN, dllexport is supposed to substitute the export section in the .DEF file - seems that it doesn't. Is this an MS bug?

Thanks,
Gil.
Reputation Points: 10
Solved Threads: 0
Newbie Poster
gil_mo is offline Offline
10 posts
since May 2008
May 9th, 2008
0

Re: importance of dllexport location in program

Here is an explaination of how I use it. I always use it with __declspec and don't have a problem. It does not affect the .DEF file -- actually the DEF file is not even needed when dllexport is used.
Last edited by Ancient Dragon; May 9th, 2008 at 6:04 pm.
Sponsor
Team Colleague
Featured Poster
Reputation Points: 5608
Solved Threads: 2282
Retired and Enjoying Life
Ancient Dragon is offline Offline
21,947 posts
since Aug 2005
May 9th, 2008
0

Re: importance of dllexport location in program

Oh, of course, forgot to mention the __declspec. Well, it is there.
Try out the scenario I depicted and see that although no link problems, a() is not being exported.

Gil.
Reputation Points: 10
Solved Threads: 0
Newbie Poster
gil_mo is offline Offline
10 posts
since May 2008
May 9th, 2008
0

Re: importance of dllexport location in program

Is b.cpp the application program that is calling the exported function in a.cpp, which is in a dll ?

In b.cpp you need to declare the function as _dllimport.
C++ Syntax (Toggle Plain Text)
  1. // b.cpp is the application program
  2. //
  3. _delspec(_dllimport) void a();
  4.  
  5. void foo()
  6. {
  7. a();
  8. }
Sponsor
Team Colleague
Featured Poster
Reputation Points: 5608
Solved Threads: 2282
Retired and Enjoying Life
Ancient Dragon is offline Offline
21,947 posts
since Aug 2005
May 10th, 2008
0

Re: importance of dllexport location in program

No, both a.cpp and b.cpp are files that compile into one dll. I did not specify the client to that dll.

Gil.
Reputation Points: 10
Solved Threads: 0
Newbie Poster
gil_mo is offline Offline
10 posts
since May 2008
May 10th, 2008
0

Re: importance of dllexport location in program

>>From what I understand from MSDN, dllexport is supposed to substitute the export section in the .DEF file -

Your understanding is incorrect. What MSDN means is that you can export the function in one of two ways:
  • use the __dllspec( __dllexport ) tags
  • add an entry into the .DEF file

The compiler does not make any entries into the .DEF file for you -- you have to do that yourself if you want them there.

Prototyping the function as you did in a.cpp is not sufficient. You have to add dllexport in the function itself
C++ Syntax (Toggle Plain Text)
  1. a.cpp
  2.  
  3. __dllspec( __dllexport ) void a()
  4. {
  5. // blabla
  6. }

You can also export an entire c++ class
C++ Syntax (Toggle Plain Text)
  1. __dllspec( __dllexport) class MyClass
  2. {
  3. // blabla
  4. }
Last edited by Ancient Dragon; May 10th, 2008 at 10:15 am.
Sponsor
Team Colleague
Featured Poster
Reputation Points: 5608
Solved Threads: 2282
Retired and Enjoying Life
Ancient Dragon is offline Offline
21,947 posts
since Aug 2005
May 10th, 2008
0

Re: importance of dllexport location in program

Well, it is also sufficient to place the function body in the same file as the *declaration*.
For example in my case, moving the function body from b.cpp to a.cpp without further changes would be enough to export the function.

I didn't see this behaviour specified in MSDN...

Thanks,
Gil.
Reputation Points: 10
Solved Threads: 0
Newbie Poster
gil_mo is offline Offline
10 posts
since May 2008

This thread is more than three months old

No one has posted to this discussion for at least three months. Please let old threads die and do not reply to them unless you feel you have something new and valuable to contribute that absolutely must be added to make the discussion complete. Otherwise, please start a new thread in this forum instead.
Message:
Previous Thread in C++ Forum Timeline: Help me with txt!!!
Next Thread in C++ Forum Timeline: End Of File (ifstream)





About Us | Contact Us | Advertise | Acceptable Use Policy
Forum Index | Build Custom RSS Feed


Follow us on Twitter


© 2011 DaniWeb® LLC