Visual Studio C++ 2005
Windows XP
我正在创建这个DLL库。 DLL实际上与另一个LIB链接。我已经包含了头文件和lib路径。一切都编好了。
实际上,这个代码我写的是在linux上运行,运行正常。现在我将它移植到Windows上运行。
但是,我注意到某些代码示例中的某些DLL在头文件中使用了这个:
static __declspec(dllexport) float some_function(int num1, int num2);
但是,我已经完成了以下示例代码,标题为* .h文件。但是,不确定我是否仍然需要上述内容?
#ifdef __cplusplus
extern "C" {
#endif
media_t* get_media(media_description_t* obj);
void* get_item(media_description_list_t *obj, int num);
int get_number_format(media_t *obj);
const char* get_media_value(media_t *obj);
#ifdef __cplusplus
}
#endif
实现* .cpp文件的示例代码
int get_number_format(media_t *obj)
{
Media *med = (Media*)obj;
return med->getNumFormat();
}
那么,我需要这个static __declspec(dllexport)
吗?
非常感谢任何建议,
答案 0 :(得分:4)
需要告诉链接器应该导出哪些函数,使其可以被其他使用DLL的代码使用。 __declspec(dllexport)执行此操作。但您也可以通过为链接器提供.def文件,导出的函数名列表来实现。有点痛苦,因为现在由你来保持该文件与你的代码同步。文档are here。
答案 1 :(得分:2)
__declspec(dllexport)
将函数添加到DLL的导出表中。此表是一种约定,允许希望使用DLL的进程正确调用该函数。
export functions from DLLs还有其他方法,但这个方法可能更现代,更容易使用。
答案 2 :(得分:1)
是的,如果您没有dllexport,则无法在您调用该函数的任何其他应用程序中访问该函数。
答案 3 :(得分:0)
如果将方法的实现放在h文件中,则不需要使用__declspec(dllexport)
声明。