问题标签 [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.
c++ - Embarcadero c ++ 10.1中的__thread没有创建线程特定的变量
在 Embarcadero c++ 10.1 程序中,我正在使用“new”创建线程的多个实例。在每种情况下,我都需要包含指针和整数的线程特定变量。
我尝试了两种不同的声明:
和
我尝试了使用和不使用“静态”修饰符。我看到两个线程的行为表明每个线程都在破坏这些变量的其他值。
我在每个线程中添加了代码以打印出 threadID 和两个变量的地址
这显示在我的调试窗口中,用于线程 (1) 和线程 (2):
似乎显示唯一的 ThreadID 但两个变量的地址在每个线程中是相同的。
我是否正确理解线程特定变量的概念?我是否应该在每个线程中看到变量的不同地址,以免它们相互干扰?
c++ - __declspec(property()) 和类声明符
所以我一直在尝试实现与 C# 中相同类型的 get 和 set。但是有些事情对如何在 C++ 中声明变量产生了一些疑问。这是代码:
这里到底发生了什么?
windows - MinGW vs MSVS下的Windos导出/导入符号;CMake 的 WINDOWS_EXPORT_ALL_SYMBOLS 被忽略
要使用 Visual Studio 构建 C 库,请使用 CMake 命令
使我免于在函数声明之前添加__declspec(dllexport)
或;__declspec(dllimport)
只有全局变量才需要显式导入/导出符号。
在 MinGW(阅读:MinGW 或其推荐的替代品 Mingw-w64)下,这不起作用。将应用程序(也是用 MinGW 构建的)链接到我的库失败,直到我在每个函数前面粘贴了导入/导出符号。而长答案https://stackoverflow.com/a/32284832/1017348表明相反:MinGW 下不需要导入/导出符号。这个答案对吗?那么如何摆脱对导入/导出符号的需要呢?
c++ - 从动态加载的 dll 内部调用 C++ 函数
我正在编写一个 C++ 程序,它在运行时动态加载一个 dll 并在该 dll 中调用一个函数。那工作正常,但现在我想从 dll 中调用我的 C++ 程序中定义的函数。
我的 main.cpp 看起来像这样:
被访问的 dll 部分是用 C 语言编写的,如下所示:
我已经阅读了__declspec(dllimport)
and__declspec(dllexport)
属性,但我对 C++ 真的很陌生,并且不确定这些是否是正确的使用方法,如果是,如何使用它们。
c++ - 如何从监视列表中隐藏一些类公共属性?
我仍在使用 BDS2006(Turbo explorer C++)并且升级仍然不是一个选项。我有一个问题,在调试一些包含以下属性的更高级的模板/类时:
被作为成员变量处理,如果监视列表和调试器太多,它们就会发疯。结果是在断点和跟踪期间大大减慢,并且当此类在监视列表中时,IDE 本身偶尔(经常)冻结(唯一的补救措施是使用 Windows 任务管理器来结束进程树)。bds.exe
所以我的问题是:
Q1:如何隐藏这些属性,使它们在观察列表中不可见,而它们仍然存在public
?
我认为可能有某种宏或指令。使那些不是public
不是一种选择。监视列表像处理成员变量而不是函数一样处理此属性。
这里的小例子(vec2
从我的 GLSL 数学中提取的类):
用法:
观察名单:
如果我打开手表的[+]
子菜单,它会显示:a
所以没有更多的属性......这可能暗示监视列表窗口可能以某种方式配置以通过一些隐藏选项来实现这一点。
这个小的单类实例不是一个大问题,但是当我改为这样的时候:
并再次观察a
IDE 在断点处立即冻结,只有 Kill 进程是我的下一个可能步骤。现在想象更大的项目,其中有更多的类和动态列表......这样的项目不再可能正确(或根本)调试。
PS。BDS2006 中IDE 的冻结是一个众所周知的错误。如果监视列表显示太多数据(它可能只是一个长字符串,没什么花哨的),IDE 会减慢并冻结(根据显示的数据量和 F7/F8 执行的步骤数)。
编辑1:
作为一种解决方法,我添加了配置宏来禁用不需要它的应用程序的大部分调配。这是一个简单类的监视列表屏幕截图示例:
但是有很多东西需要调配,甚至像这样简单的东西已经超出了观察窗口的极限。
Edit2:进度更新
#pragma声明中没有一个看起来很有希望。从 2010 年开始,Debugger_Visualizers已添加到 IDE 中,这可以解决这个问题,但是我仍在使用旧版本,目前移植不是一个选项。
数组的当前解决方法:
手表:
因此,对于单个实例,请使用vec2::dat
member 而不是vec2
. 对于使用数组监视格式 a[start index].dat,number of items
而不是a
.
这很快(不会冻结),但是由于硬编码的大小(必须是硬编码的数字,没有表达式或变量),它可能会违反访问权限。这仍然不能用于struct/classes
更复杂的整体(如多边形、网格),但至少现在有一些用于数组的调试选项。
c++ - 没有虚拟析构函数的 novtable 基类上的删除行为
据我了解,如果您在接口指针(或更具体地说是基类指针,指向派生类实例)上调用 delete,并且该声明没有虚拟析构函数,则结果行为是未定义的,并且析构函数的派生对象不会被调用。
通常,您要么为基类定义一个虚拟析构函数,要么将其声明为私有以防止在接口指针上调用 delete。
如果您声明没有 vtable 的接口
现在通过接口指针删除对象是明确定义的行为,并调用适当的析构函数吗?我不明白为什么会这样,但被告知不是这样。
c++ - 如何定义正确设置 __declspec 的宏
使用 Visual Studio 2017,我正在尝试构建我的最新项目,该项目导入库,然后从.dll
文件中导入方法和函数。
在构建我的项目时,我得到一个错误列表,如下所示:
列出的所有函数都来自导入的库。
例如,该EACServer::Initialize
方法定义如下EACServer.h
:
在我正在编译的代码中,这个函数是这样使用的(在.h
ofc文件中导入了相应的头文件):
的类定义EACServer
是基本的:
我被告知抛出这些错误是因为我缺少正确设置__declspec
.
我怎样才能找到/实现这个宏?
c++ - c++ LoadLibrary 和 GetProcAddress 来自外部 DLL
我有一个外部 DLL 可以使用。我尝试加载 DLLLoadLibrary
并通过调用来获取函数,GetProcAddress
但每次调试程序时,我都会遇到异常,我可以通过 windows 忽略它,但最后我的 main 方法也会抛出异常,并且永远不会以调用异常结束:
的定义"getrandomnum"
是:
例外情况是:
和:
和:
这个例外永远重复。
有人可以帮助我吗?
c++ - 如何导出在头文件中完全定义的类?
DLL 库:
如果我尝试从其他库调用此代码,则会发生链接器错误。如果从 foo.h 中删除 COMMON_DLL 或将 foo() 方法的实现移动到 .cpp 文件,那么一切正常。为什么会这样?
c++ - 未解析的外部符号“__declspec(dllimport)”
我正在尝试为 bakkesmod 编写一个小插件,因为我很生气。我观看了关于这个主题的唯一 2 个视频,但是......它不起作用,我对每个 void 都有这个错误 - >> 严重性代码描述项目文件行抑制状态错误 LNK2001 未解析的外部符号“__declspec(dllimport) public : void __thiscall GameWrapper::HookEvent(class std::basic_string<char,struct std::char_traits,class std::allocator >,class std::function<void __cdecl(class std::basic_string<char,struct std:: char_traits,class std::allocator >)>)" (_ imp?HookEvent@GameWrapper@@QAEXV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V?$function@$$A6AXV?$basic_string@DU?$char_traits @D@std@@V?$allocator@D@2@@std@@@Z@3@@Z) TagName C:\Users\leodu\source\repos\TagName\TagName\TrollTagName.obj 1
这是我的代码。
TroolTagName.cpp(不判断名称)
工具标签名称.h
该项目和一个动态库 dll 项目。
我尝试在 void 之前添加 __declspec (dllexport) 但是......我收到了这个错误 - >> redefinition; 不同的链接,我没有发现这个错误,所以我被阻止了:(