问题标签 [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 投票
3 回答
1911 浏览

c++ - C++ __declspec(dllexport) 函数无法访问实例变量

我试图通过导出为 DLL(在 Windows/VS 2010 上)来保护一些 C++ 代码。

在下面的示例中var,在超类构造函数中设置,调试器显示它肯定设置为引用something

测试是在使用包含测试类的 DLL 的代码中构建的。

但是当go从 test 的实例上调用时(从 DLL 调用,但调用方法由 DLL 使用者调用)var是一个空指针(它的值为 0)。

这是一种简化,因为我不允许共享实际代码。

在消费代码中,标头是

实际的代码要复杂得多,但如果有人能告诉我是否有已知限制使用 dllexport 的实例变量,或者我更有可能在空指针上调用 Test 的方法,或者也许这是一个 dllexport 和继承问题。此代码在我拆分消费者代码之前有效,并且 DLL 代码在同一个项目中,它只是在拆分后才中断,我想将 dllexporting/dllimporting 函数公开到消费者使用的第二组标头中。

0 投票
1 回答
868 浏览

c++ - GUID 解释 - C++

我使用来自 windows 的示例来学习 DirectShow,并且在一个类中,我在头文件中有以下代码:

而cpp文件中的这一行:

你能解释一下所有事物是如何协同工作的吗?

非常感谢。

0 投票
1 回答
203 浏览

c - Pygmalion 转换:使用“#define DLL”替代“extern”C”__declspec(dllexport)”

有没有办法使用细长的#define 将难看的“”extern \“C\”__declspec(dllexport)”转换为一个迷人的术语“DLL”。
即:

当然,问题在于 C 周围的嵌入式引号。

0 投票
0 回答
209 浏览

visual-c++ - dllimport需要什么?

我正在使用 DLL 来更好地理解它们。Add所以我创建了一个简单的 dll(带有加载时动态链接) ,它具有SubMul. __declspec(dllexport)在我用于函数声明的 dll 的头文件中。

对于可执行文件,我将编译 dll 后创建的 .lib 添加到属性(用于链接)。之后我直接调用该函数Add而不使用__declspec(dllimport). 该程序奏效了。然后我将函数调用更改为__declspec(dllimport) (Add),程序再次运行。

我无法理解需求__declspec(dllimport)是什么?我还没有编写运行时链接 DLL,但从我看到的示例中,在这种情况下也不需要 dllimport。

感谢你的协助。

0 投票
2 回答
184 浏览

c++ - __declspec(dllimport) 导致 MSVC 2010 上的编译器崩溃

在 *.cpp 文件中,尝试使用第三方库:

选择:

我可以通过删除宏和#define 来重现结果,并手动编辑第三方文件是否有 __declspec(dllimport) - 所以上面的预处理器只是为了显示正在发生的事情,它不是复制粘贴。

有没有人遇到过类似的事情,或者可以暗示原因?(使用 CMake 创建)。上面是 2 行 *.cpp 崩溃的实际示例,因此它被缩小到 #include 中的某些内容。

以下也可以正常工作:

  1. 编译使用 dllimport/export 的第三方提供的示例(他们提供 *.sln),因此这似乎不是库的错
  2. 将第三方库编译为生产项目的一部分(因此 dllexport 工作正常)

我已经搜索了两个项目的项目设置页面以尝试发现差异,但出现了空白。当然,我可能会遗漏一些东西,因为这些设置页面不是最容易导航的。我将在一天左右的时间内访问 VS2008,因此可以与之比较。第三方库是 MySql++。

0 投票
1 回答
267 浏览

c++ - 如何在 __declspec(uuid(" ComObjectGUID") ) 中传递动态值

在我的代码中,这绝对可以正常工作:

但是我不想传递一个 staitc 值,而是想传递这样的东西,但它给出了编译错误:

有人可以建议我如何实现这一目标。

谢谢,萨南

0 投票
1 回答
669 浏览

visual-studio-2010 - 符号未在 DLL 中导出

我在 VS2010 中分两步生成 DLL:

首先生成一个静态 .LIB 文件,其中函数定义为 __declspec(dllexport)。其次,会生成一个链接到该 .LIB 文件的 DLL。此生成的 DLL 不包含从 .LIB 导出的函数。

有什么想法可能导致这种情况吗?

我还尝试将选项 /EXPORT:funcname 添加到库项目设置中。我检查了生成 .LIB 文件本身,那里的功能不是 exportet (但我不是 100% 确定我用于检查库导出的工具......)

谢谢!

0 投票
1 回答
1008 浏览

c++ - __declspec(align) 用于多个声明

很抱歉这个非常简单的问题,找不到可谷歌搜索的答案。

这个声明语法是:

相当于:

还是只有第一个变量在后一种语法中对齐?

如果重要的话,这些是全局方法中的局部变量。

0 投票
0 回答
1129 浏览

visual-studio-2010 - C2487 与提升成员

我尝试将我们的项目从静态库重组为子项目的共享库。

好吧,使用 VS Compiler 所有导出类都需要一个_ declspec(dllexport)并且导入它们需要_declspec(dllimport)。工作正常。但是我遇到了从 boost 成员派生的所有类(例如单例或 ptr_map)的麻烦。

我得到错误

错误 C2487: 'boost::serialization::singleton::instance' : dll 接口类的成员不能用 dll 接口声明

微软的解决方案不是很有帮助,因为更改 boosts 代码可能不是一个好主意;)

导出 boost 派生类不是一个好主意吗?有谁知道这是从哪里来的,或者可能知道如何解决?

(下面的示例代码)

谢谢!


这是一个示例(mylib.h 作为共享库项目,名为:“myLib”):

它的实现(myLib.cpp)

一个简单的 main.cpp(作为可执行项目)

几点:

  • VS2010
  • x64
  • 提升 1.52
0 投票
1 回答
375 浏览

visual-c++ - 阻止 .lib 中的 dllexport 函数从 DLL 导出

我有一个已编译成静态库的 axtls 库的副本。我将它链接到我正在构建的 DLL 中,并且某些 axtls 函数(_MD5_Final_MD5_Init_MD5_Update似乎正在从我的 DLL 中导出。我试图弄清楚如何阻止这种情况发生。

我的 DLL 是用一个.def没有列出任何这些函数的文件构建的。但是,它们都被声明为__declspec(dllexport)在 axtls 本身中,所以我怀疑这就是它们被导出的原因。

我想知道是否有办法阻止这些函数的导出,使用.def文件或类似的?我的 DLL 将用作公共 SDK 的一部分,因此公开这样的内部函数并不是特别好。

我怀疑__declspec(dllexport)从 axtls 的定义中删除 可能会解决我的问题,但如果可以避免的话,我宁愿不去修改上游代码。