问题标签 [declspec]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
609 浏览

c++ - 使用 __declspec(dllexport)

我正在以 OOP 方式实现我的 .dll 库

我的宏是:

在我DLLINTERFACE使用一些stds 将类名放在类名之前后,编译器给了我几个警告,我应该dll-interface为每个与 s 一起使用的函数 提供一个警告std。我尝试通过添加DLLINTERFACE一些功能来解决这个问题,但现在给了我一个错误,因为我已经把它放在了类名上。也许,我可以通过DLLINTERFACE用它定义我的所有公共函数来删除警告。但是如何通过只定义类名而不是单个函数来消除警告?

像这样:

但不是这个:

0 投票
3 回答
3002 浏览

c# - __declspec(dllexport)::vector

我一直在尝试研究如何将字符串数组从 c++ dll 返回到 ac# 应用程序,但我一直坚持如何做到这一点,或者在非常基本的层面上找到一篇文章。

假设我有下面的代码。如何修复粗体线:

谢谢

马特

0 投票
1 回答
307 浏览

c++ - 从 C++ dll 错误 LNK 2019 导入函数时遇到问题

我正在尝试用 C++ 编写和测试一个 dll 文件,只要我想要文件系统级别的访问权限,我就可以调用它。尝试在 C++ 中访问此 dll 中的方法时,我目前非常头疼。奇怪的是,我能够轻松地在单独的 C# 程序中调用代码,但我想了解 dll 交互在 C++ 中是如何工作的。

这是我的虚拟可执行文件的 .cpp,它应该只调用我的“newMain”测试方法。

问题是,当我运行它时,我得到了这个错误:

这是 adsInterface 的 .h:

这是我的 adsInterface 的 .cpp:

我还将包含我在编译 dll 时使用的 .def 文件:

奇怪的是,我能够用这一行在 C# 中导入该方法(我也不必包含 .lib 文件):

当我正常调用它时它会运行:

我已经阅读了许多关于如何导入 dll 函数的不同指南,并且我已经达到了我认为我只是将语言之间的不同导入方式组合在一起并且只是把事情弄得一团糟的地步。如果有人能够提供一些关于我应该如何在 C++ 中导入 dll 方法的见解,那将不胜感激。

0 投票
2 回答
15383 浏览

c++ - `__declspec(align(#))` 是如何工作的?

的,我读过这个:http: //msdn.microsoft.com/en-us/library/83ythb65.aspx 但我不清楚。首先,__declspec(align(#))使用它声明的每个对象(在结构中)从对齐的偏移量开始。那部分很清楚。对齐也被对象所在的结构化“继承”。但它不会改变对象的大小,不是吗?确切地说,为什么sizeof()在这段代码中:

返回32

0 投票
1 回答
3584 浏览

c++ - C++ [[gnu::visibility("default")]] vs __declspec(dllexport) on Windows and Linux

I needed to make some shared libraries in C++ and I used linux as my developer operating system. I know that I need to make symbols visible if I want to load them via dlsym/LoadLibrary. So in linux all of my symbols followed this pattern:

I used clang with C++11 enabled and I was able to load f in my host program. When I moved to windows I used GCC 4.8.2 with C++11 enabled and that pattern worked on windows machine too with LoadLibrary. (I needed to use C++11 for new attribute syntax). I know that on windows I need to use __declspec(dllexport) to export symbols from shared library. So what now? Is __declspec(dllexport) not required anymore?

Edit:

I found here that those are synonyms (I think) so the question is that is there an [[gnu::attribute]] for __declspec(dllimport) to avoid using macros and ifdefs for specific targets?

0 投票
1 回答
648 浏览

c++ - C/C++ 链接约定

当调用像 copy_if、transform 等将一元或二元函数作为最后一个参数的 C++ 算法时,我可以传递像 atoi 或 tolower 这样的 C 库函数吗?

例如,下面的调用工作正常并给出正确的输出(在 ideone 中试过)

这种用法是否保证适用于所有 C++ 编译器?

用 C++ 思考的书提到“这适用于某些编译器,但不是必需的”。提到的原因是(据我了解)transform 是 C++ 函数,并期望它的最后一个参数具有相同的调用约定。

该书还建议了解决此问题的方法,即在单独的 cpp 文件中创建这样的包装函数,并且不包含 iostreams 头文件。

这工作正常,但我不明白这如何解决调用约定问题?transform 仍然是 c++ 函数,tolower 仍然是 strTolower 中的 C 函数,所以这里如何处理不同的调用约定。

0 投票
1 回答
125 浏览

c++ - 导出符号时如何处理多个库?

我正在开发一个项目(跨平台,但在这种情况下只有 Windows 很重要),它创建了许多共享库(它们在某种程度上相互依赖)。所有声明函数或结构/类/枚举/等的头文件。可以在单独的 /include 文件夹中找到,但源文件被分组到模块中。

我为 _declspec 导入/导出创建了一个宏,但我的问题是:

我应该有一个不同的预处理器指令来触发每个库的导出版本吗?由于库可以使用属于其他库的标头,因此将这些符号视为导入重要吗?

从我在模拟项目中测试的结果来看,您可以将它们全部作为导出符号,它们仍然可以工作,但这是一种好的做法吗?

谢谢你。

0 投票
0 回答
805 浏览

c++ - c++ 如何使用 __declspec 属性获取和设置固定大小的数组

我正在处理一个 struct mf 固定的 char 数组,但其中一些成员的大小和位置取决于其他成员。所以我想使用 __declspec(property) 来动态检索这些“变量”成员

所以理想情况下它看起来像这样:

我知道上述方法行不通,但是有没有办法做同样的事情?

0 投票
0 回答
611 浏览

c++ - 链接到没有 __imp__ 导出的 DLL

我正在尝试将我的项目与一个 DLL(我们称之为 A.DLL)链接,我得到了 unresolved external symbol __imp__?func@@YA_JXZ。我“dumpbin /exports”编辑了 DLL 和 lib,我只看到了?func@@YAJXZ.

__imp__func因此,如果 some1 可以解释 1)为什么基金的修饰名称中后缀的差异 2)为什么DLL 和 Lib 文件中没有用于取消引用功能的名称,我将非常感激?

0 投票
1 回答
429 浏览

c++ - __declspec() 中的“存储类信息”是什么意思?

我正在阅读有关 __declspec的MSDN 文章。

它开始于:

用于指定存储类信息的扩展属性语法 使用 __declspec 关键字,它指定给定类型的实例将与下面列出的 Microsoft 特定的存储类属​​性一起存储。...

存储类信息到底是什么意思?以及它如何影响编译器?

加 1

有人发布了一个链接作为评论,但很快就删除了。我发现该链接很有用。所以我在这里添加它。

http://en.cppreference.com/w/cpp/language/storage_duration