•
•
•
•
What is DaniWeb IT Discussion Community?
You're currently browsing the C++ section within the Software Development category of DaniWeb, a massive community of 391,601 software developers, web developers, Internet marketers, and tech gurus who are all enthusiastic about making contacts, networking, and learning from each other. In fact, there are 2,606 IT professionals currently interacting right now! Registration is free, only takes a minute and lets you enjoy all of the interactive features of the site.
Please support our C++ advertiser:
Views: 368 | Replies: 6
![]() |
•
•
Join Date: May 2008
Posts: 4
Reputation:
Rep Power: 0
Solved Threads: 0
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
File b.cpp
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.
(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)
void dllexport a(); a();
File b.cpp
C++ Syntax (Toggle Plain Text)
void a() { // function body }
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.
•
•
Join Date: Aug 2005
Location: near St Louis, Missouri, USA
Posts: 10,546
Reputation:
Rep Power: 36
Solved Threads: 860
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 5:04 pm.
I think it's about time we voted for senators with breasts. After all, we've been voting for boobs long enough. ~Clarie Sargent, Arizona senatorial candidate
Those who are too smart to engage in politics are punished by being governed by those who are dumber. ~Plato
Those who are too smart to engage in politics are punished by being governed by those who are dumber. ~Plato
•
•
Join Date: Aug 2005
Location: near St Louis, Missouri, USA
Posts: 10,546
Reputation:
Rep Power: 36
Solved Threads: 860
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.
In b.cpp you need to declare the function as _dllimport.
// b.cpp is the application program
//
_delspec(_dllimport) void a();
void foo()
{
a();
} I think it's about time we voted for senators with breasts. After all, we've been voting for boobs long enough. ~Clarie Sargent, Arizona senatorial candidate
Those who are too smart to engage in politics are punished by being governed by those who are dumber. ~Plato
Those who are too smart to engage in politics are punished by being governed by those who are dumber. ~Plato
•
•
Join Date: Aug 2005
Location: near St Louis, Missouri, USA
Posts: 10,546
Reputation:
Rep Power: 36
Solved Threads: 860
>>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:
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
You can also export an entire c++ class
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
a.cpp
__dllspec( __dllexport ) void a()
{
// blabla
}You can also export an entire c++ class
__dllspec( __dllexport) class MyClass
{
// blabla
} Last edited by Ancient Dragon : May 10th, 2008 at 9:15 am.
I think it's about time we voted for senators with breasts. After all, we've been voting for boobs long enough. ~Clarie Sargent, Arizona senatorial candidate
Those who are too smart to engage in politics are punished by being governed by those who are dumber. ~Plato
Those who are too smart to engage in politics are punished by being governed by those who are dumber. ~Plato
![]() |
•
•
•
•
Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)
•
•
•
•
•
•
•
•
DaniWeb C++ Marketplace
Other Threads in the C++ Forum
- Previous Thread: Help me with txt!!!
- Next Thread: End Of File (ifstream)



Linear Mode