首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏专业duilib使用+业余界面开发

    __declspec(dllexport)和__declspec(dllimport)

    头文件中声明了方法,在提供者那里方法应该被声明为__declspec(dllexport),在使用者那里,方法应该被声明为__declspec(dllimport)。 __declspec(dllexport)声明一个导出函数,是说这个函数要从本DLL导出。 __declspec(dllimport)声明一个导入函数,是说这个函数是从别的DLL导入。我要用。 一般用于使用某个dll的exe中 不使用 __declspec(dllimport) 也能正确编译代码,但使用 __declspec(dllimport) 使编译器可以生成更好的代码。 但是,必须使用 __declspec(dllimport) 才能导入 DLL 中使用的变量。

    2.2K70发布于 2018-05-24
  • 来自专栏acoolgiser_zhuanlan

    MFC(C++)中 __declspec(dllexport) 和 __declspec(dllimport)的作用

    本文链接:https://blog.csdn.net/acoolgiser/article/details/99735282 从static变量导出问题解析 __declspec(dllexport) 和 __declspec(dllimport)的作用 这段时间要把tinyxml从静态库弄成动态库,要用到__declspec(dllexport)和__declspec(dllimport 比如一个项目中的Class中含有一个静态变量,生成dll的时候只采用了__declspec(dllexport) 如下: dll工程 A1.h:   #define OS_API_EXPORT __declspec 使用dll的工程在编译时也会将dll相关的头文件列入编译对象,而不会理会dll的cpp文件中的初始化过程,因此会出现a没有定义的情况,这时 __declspec(dllimport)就派上用场了,他会告诉使用 最终为了方便程序的开发,不用分别写出dll工程的头文件和使用dll工程的头文件,头文件可以写为如下形式: A.h    #define OS_API_IMPORT __declspec(dllimport

    1.7K10发布于 2019-08-29
  • 来自专栏转载gongluck的CSDN博客

    从static变量导出问题解析 __declspec(dllexport) 和 __declspec(dllimport)的作用

         这段时间要把tinyxml从静态库弄成动态库,要用到__declspec(dllexport)和__declspec(dllimport)来导出dll和lib文件。 比如一个项目中的Class中含有一个静态变量,生成dll的时候只采用了__declspec(dllexport) 如下: dll工程 A1.h:   #define OS_API_EXPORT __declspec 使用dll的工程在编译时也会将dll相关的头文件列入编译对象,而不会理会dll的cpp文件中的初始化过程,因此会出现a没有定义的情况,这时 __declspec(dllimport)就派上用场了,他会告诉使用 提供给别人使用的dll头文件应当写成: A2.h:   #define OS_API_IMPORT __declspec(dllimport)   class OS_API_IMPORT A {static 最终为了方便程序的开发,不用分别写出dll工程的头文件和使用dll工程的头文件,头文件可以写为如下形式: A.h    #define OS_API_IMPORT __declspec(dllimport

    2.2K60发布于 2018-03-08
  • 来自专栏转载gongluck的CSDN博客

    c++ 中__declspec 的用法

    c++ 中__declspec 的用法 语法说明: __declspec ( extended-decl-modifier-seq ) 扩展修饰符: 1:align(#)    用__ declspec(align(#))精确控制用户自定数据的对齐方式 ,#是对齐值。 ")) int c = 1; __declspec(allocate("share_data")) int d; 3. deprecated   用__declspec(deprecated ) 说明一个函数 main() {   fun1();   fun2(); fun3(); } 4.dllimport 和dllexport 用__declspec(dllexport),__declspec __declspec(thread)后面的变量 必须声明为函数中(或函数外)的一个全局变量或静态变量。不能声明一个类型为__declspec(thread)的局部变量。

    3.8K70发布于 2018-03-08
  • 来自专栏c++ 学习分享

    无法解析的外部符号 “__declspec(dllimport)

    1>libboost_system-vc80-mt-1_55.lib(error_code.obj) : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) D@2@@std@@H@Z) 中被引用 1>libboost_thread-vc80-mt-gd-1_55.lib(thread.obj) : error LNK2019: 无法解析的外部符号 "__declspec BV123@XZ) 中被引用 1>libboost_thread-vc80-mt-gd-1_55.lib(thread.obj) : error LNK2019: 无法解析的外部符号 "__declspec BV123@XZ) 中被引用 1>libboost_thread-vc80-mt-gd-1_55.lib(thread.obj) : error LNK2019: 无法解析的外部符号 "__declspec BV123@XZ) 中被引用 1>libboost_thread-vc80-mt-gd-1_55.lib(thread.obj) : error LNK2019: 无法解析的外部符号 "__declspec

    2.6K20编辑于 2023-07-08
  • 来自专栏SnailTyan

    error LNK2001: 无法解析的外部符号 __declspec(dllimport) void __cdecl google::InstallFailureSignalHandle

    error LNK2001: 无法解析的外部符号 "__declspec(dllimport) void __cdecl google::InstallFailureSignalHandler(void

    1.8K10编辑于 2022-08-11
  • C/C++ 内存读写Lib库简单封装

    * // 声明头文件 #ifndef LyShark__h #define LyShark__h #pragma comment(lib,"LyShark.lib"); extern "C"__declspec (dllexport) int GetProcessID(char *Name); extern "C"__declspec(dllexport) int GetIntMemory_One(int Pid ,long Base,int One); extern "C"__declspec(dllexport) int GetIntMemory_Two(int Pid,long Base,int One,int ); extern "C"__declspec(dllexport) int GetIntMemory_Four(int Pid,long Base,int One,int Two,int Three, Three,int Four,int Five); extern "C"__declspec(dllexport) int GetIntMemory_Six(int Pid,long Base,int

    1K30编辑于 2022-12-28
  • 来自专栏全栈程序员必看

    lnk2019无法解析的外部符号_declspec_无法解析的外部符号lnk2001

    Visual Studio2015编译中出现此问题:error LNK2019: 无法解析的外部符号 __vsnprintf,该符号在函数xxxx中被引用

    2.8K20编辑于 2022-11-10
  • 来自专栏鸿鹄实验室

    抛砖引玉之CobaltStrike4.1的BOF

    (datap * parser); DECLSPEC_IMPORT short BeaconDataShort(datap * parser); DECLSPEC_IMPORT int BeaconDataLength * format); DECLSPEC_IMPORT void BeaconFormatFree(formatp * format); DECLSPEC_IMPORT void BeaconFormatAppend , char * fmt, ...); DECLSPEC_IMPORT char * BeaconFormatToString(formatp * format, int * size); DECLSPEC_IMPORT data, int len); /* Token Functions */ DECLSPEC_IMPORT BOOL BeaconUseToken(HANDLE token); DECLSPEC_IMPORT (HWND); DECLSPEC_IMPORT WINUSERAPI HANDLE WINAPI USER32$GetClipboardData(UINT); DECLSPEC_IMPORT WINUSERAPI

    1.5K20发布于 2021-04-15
  • 来自专栏xiaoxi666的专栏

    Qt中纯C++项目发布为dll的方法(超详细步骤)

    创建好以后你会发现有一个包含global的头文件,这个文件中定义了__declspec(dllexport)、__declspec(dllimport)等,也可以删掉(如果要按照下面的方法的话,删掉即可 按照导出dll的的操作划分,有两种模式: 导出普通方法(导出后可静态调用,也可动态调用) 首先是头文件内容: 头文件: 在方法声明时,前面加上__declspec(dllimport),也可用#define 定义,看代码: //为了和将来用到的程序中公用一个头文件,创建dll时用到的是__declspec(dllexport),而使用dll时用到__declspec(dllimport),完全可以各自写一下 __declspec(dllimport) #endif //下面我要定义4个普通函数: TESTDLLSHARED_EXPORT int test1(); TESTDLLSHARED_EXPORT (dllexport);使用时,换成__declspec(dllimport),也可以参照前面的#define条件定义法。

    1.7K20发布于 2018-10-29
  • 来自专栏全栈程序员必看

    lnk2019无法解析的外部符号_declspec_error lnk1120无法解析的外部命令

    3.点击“键入或选择新平台”下拉框,选”x64″,然后点击“确定”

    2.3K20编辑于 2022-11-08
  • MFC DLL编写MFC调用全面研究报告

    MFC DLL导出函数有两种方法,第一就是__declspec(dllexport),第2种就是def文件,全面研究报告结论,我们应该少用def文件,而应该用__declspec(dllexport)。 以下是研究过程: (1)win32 DLL导出函数加__declspec(dllexport),静态加载(用#pragama+__declspec(dllimport)用法)调用成功 (2)win32 __declspec(dllexport),类方法不用加,静态加载调用成功 (4)MFC 共享DLL如果不在类名前面加了一个__declspec(dllexport),情况很复杂:实验结果 (a)带有构造函数和析构函数情况下 ,其他所有函数加__declspec(dllexport)调用成功 (d)没有构造函数和析构函数情况下,部分函数加__declspec(dllexport)调用加__declspec(dllexport ,调用或者本身都会出错 结论:MFC导出类有3种方法推荐,第一只要在名前面加一个__declspec(dllexport),第二在所有函数包含构造后析构函数加__declspec(dllexport),

    18610编辑于 2025-07-18
  • 来自专栏全栈程序员必看

    不能定义声明dllimport_不允许 dllimport 静态数据成员

    例如: class __declspec(dllimport) CTest { } __declspec(dllimport)是MS特有的描述符,看名字就知道是用在DLL链接时用到的,DLL是WINDOWS 当然,如果你的DLL里全是C++的类的话,你无法在DEF里指定导出的函数,只能用__declspec(dllexport)导出类 __declspec(dllimport) 声明一个导入函数,是说这个函数是从别的 一般用于使用某个dll的exe中 不使用 __declspec(dllimport) 也能正确编译代码,但使用 __declspec(dllimport) 使编译器可以生成更好的代码。 但是,MSDN文档里面,对于__declspec(dllimport)的说明让人感觉有点奇怪,先来看看MSDN里面是怎么说的: 不使 用 __declspec(dllimport) 也能正确编译代码,但使用 __declspec(dllimport) 使编译器可以生成更好的代码。

    2.7K21编辑于 2022-07-25
  • 来自专栏Script Boy (CN-SIMO)

    编写dll时,为什么有 extern “C”

    假设被调用的DLL存在一个导出函数,原型如下: void printN(int); 三种方式从DLL导入导出函数 生成DLL时使用模块定义 (.def) 文件 在主应用程序的函数定义中使用关键字__declspec _declspec(dllexport)和_declspec(dllimport)的作用 _declspec还有另外的用途,这里只讨论跟dll相关的使用。正如括号里的关键字一样,导出和导入。 _declspec(dllexport)用在dll上,用于说明这是导出的函数。而_declspec(dllimport)用在调用dll的程序中,用于说明这是从dll中导入的函数。 而使用_declspec(dllimport)却不是必须的,但是建议这么做。 举例: ·extern “C” __declspec(dllexport) bool __stdcall cswuyg(); ·extern “C”__declspec(dllimport) bool

    3.2K10编辑于 2022-05-10
  • 来自专栏Script Boy (CN-SIMO)

    exe调用DLL的方式

    假设被调用的DLL存在一个导出函数,原型如下: void printN(int); 三种方式从DLL导入导出函数 生成DLL时使用模块定义 (.def) 文件 在主应用程序的函数定义中使用关键字__declspec _declspec(dllexport)和_declspec(dllimport)的作用 _declspec还有另外的用途,这里只讨论跟dll相关的使用。正如括号里的关键字一样,导出和导入。 _declspec(dllexport)用在dll上,用于说明这是导出的函数。而_declspec(dllimport)用在调用dll的程序中,用于说明这是从dll中导入的函数。 而使用_declspec(dllimport)却不是必须的,但是建议这么做。 举例: ·extern “C” __declspec(dllexport) bool __stdcall cswuyg(); ·extern “C”__declspec(dllimport) bool

    3.3K10发布于 2020-08-20
  • 来自专栏C++教程

    【Example】C++ 接口(抽象类)概念讲解及例子演示

    补充 DLL 导出相关知识(重要): dllexport 与 dllimport 属性官方解释:Microsoft 专用 dllexport 与 dllimport 注意两个属性必须搭配 _declspec 我们的两个动态库是给外部程序调用的,所以应使用 _declspec(dllexport),表明类可以被外部所使用。 注意:[摘自MSDN] 不使用 __declspec(dllimport) 也能正确编译代码,但使用 __declspec(dllimport) 使编译器可以生成更好的代码。 但是,必须使用 __declspec(dllimport) 才能导入 DLL 中使用的变量。 (dllexport) #else #define BrainToolBoxDLL __declspec(dllimport) #endif // 修饰类使其可以被导出 class BrainToolBoxDLL

    2.5K30编辑于 2022-04-28
  • 来自专栏IOT物联网小镇

    c语言边角料5:一个跨平台的头文件

    有些人需要在 Windows 系统下使用; 有些人使用 C 语言开发,有些人使用 C++ 来开发; 有些人使用动态库,有些人使用静态库; 特别是在 Windows 系统中,库文件中导出的函数需要使用 _declspec (dllexport) 来声明函数,而使用者在导入的时候,需要使用 _declspec(dllimport) 来声明函数,甚是麻烦! #define MY_API __declspec(dllimport) #endif #endif #endif #elif defined (dllexport) g++ 编译器:#define MY_API extern "C" __declspec(dllexport) 2. (dllimport) g++ 编译器:#define MY_API __declspec(dllimport) 这样就相当于声明导入库函数了。

    1.4K30发布于 2021-05-13
  • 来自专栏jiajia_deng

    extern \"C\" 关键字的作用

    查看dll导出函数的工具:Dependency Walker #include <stdio.h> // 使用 C 编译器编译后的dll导出函数不会倾轧 _declspec(dllexport) int add(int a, int b) { return a + b; } _declspec(dllexport) int sub(int a, int b) { return a - b; } #include // 使用 C++ 编译器编译后的dll导出的所有函数都会倾轧 _declspec(dllexport) int add(int a, int b) { return #include // 使用 C++ 编译器编译后的dll导出的所有函数都会倾轧 // 增加 extern “C” 关键字 extern “C” { _declspec(dllexport ) int add(int a, int b) { return a + b; } _declspec(dllexport) int sub(int a, int b) { return a - b

    49620编辑于 2023-10-20
  • 来自专栏独行猫a的沉淀积累总结

    linux 编译 c或cpp 文件为动态库 so 文件(最简单直观的模板)

    naked call不是类型修饰符,故必须和_declspec共同使用。 __declspec关键字应该出现在声明的前面。 __declspec(dllexport)用于Windows中的动态库中,声明导出函数、类、对象等供外面调用,省略给出.def文件。 def文件或__declspec(dllexport)都是将公共符号导入到应用程序或从DLL导出函数。 如果不提供__declspec(dllexport)导出DLL函数,则DLL需要提供.def文件。 不使用__declspec(dllimport)也能正确编译代码,但使用__declspec(dllimport)使编译器可以生成更好的代码。

    7.2K40发布于 2020-08-04
  • 来自专栏Tech Explorer

    visual studio静态,动态链接库开发工具简单使用

    14 15 16 17 18 19 20 21 22 23 24 25 26 27 #ifndef EXT_H #define EXT_H #ifdef Import #define Dll __declspec (dllimport) #else #ifdef Export #define Dll __declspec(dllexport) #else #define Dll #endif #endif ( dllimport )  或 1 __declspec( dllexport ) 补充:也可以用def文件,不过我没试过,参看 http://msdn.microsoft.com/zh-cn/library 这个时候要注意,__declspec( dllimport )和__declspec( dllexport ) 的使用是不一样的,在库里导出的符号(函数,变量等,可以用dumpbin查看)应该使用__declspec ( dllexport ) ,而使用库的代码,在包含头文件后,要有这些符号的声明,要看到__declspec( dllimport )形式的声明,所以这是有区别的。

    1.5K40发布于 2021-06-25
领券