c\c++ 中存储 COM 的 VT_DECIMAL 的正确类型是什么?

2023-12-20

我正在尝试为 ADO 编写一个包装器。

A DECIMAL是一种类型 aCOM VARIANT可以是,当VARIANT类型是VT_DECIMAL.

我试图将其放入 C 原生数据类型中,并保留变量值。 似乎正确的类型是 long double,但我收到“没有合适的转换错误”。

例如:

_variant_t v;
...

if(v.vt == VT_DECIMAL)
{
  double d = (double)v; //this works but I'm afraid can be loss of data...
  long double ld1 = (long double)v; //error: more then one conversion from variant to long double applied.
  long double ld2 = (long double)v.decVal; //error: no suitable conversion function from decimal to long double exist.  
}

所以我的问题是:

  1. 使用 double 存储所有可能的十进制值是否完全安全?

  2. 如果不是,我怎样才能将小数转换为长双精度?

  3. 如何将小数转换为字符串? (使用 sprintf对我也有好处)


内部表示为DECIMAL不是双精度浮点值,它是带有符号/比例选项的整数。如果你要初始化DECIMAL部分,您应该初始化这些字段 - 96 位整数值、小数位数、符号,然后您将获得有效的小数VARIANT value.

DECIMAL on MSDN https://web.archive.org/web/20170621131455/http://msdn.microsoft.com:80/en-us/library/windows/desktop/ms221061(v=VS.85).aspx:

  • 比例 - 数字的小数位数。有效值从 0 到 28。因此 12.345 表示为 12345,小数位数为 3。
  • 标志——表示标志; 0 表示正数,DECIMAL_NEG 表示负数。因此,-1 表示为设置了 DECIMAL_NEG 位的 1。
  • Hi32 - 数字的高 32 位。
  • Lo64 - 数字的低 64 位。这是一个 _int64。

你的问题:

使用 double 存储所有可能的十进制值是否完全安全?

您不能直接初始化为 double (例如VT_R8),但您可以初始化为双变体并使用变体转换 API 转换为VT_DECIMAL。可以对值进行小舍入。

如果不是,我怎样才能将小数转换为长双精度?

如何将小数转换为字符串? (使用

VariantChangeType https://msdn.microsoft.com/en-us/library/windows/desktop/ms221258可以将十进制变体转换为另一种类型的变体,包括整数、双精度、字符串 - 您提供要转换为的类型。反之亦然,您也可以将不同的东西转换为十进制。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c\c++ 中存储 COM 的 VT_DECIMAL 的正确类型是什么? 的相关文章

  • Task.Factory.StartNew 或 Parallel.ForEach 对于许多长时间运行的任务? [复制]

    这个问题在这里已经有答案了 可能的重复 Parallel ForEach 与 Task Factory StartNew https stackoverflow com questions 5009181 parallel foreach
  • C# 中直接从 URL 获取图像尺寸

    我正在尝试使用以下代码直接从网络上获取图片的尺寸 string image http www hephaestusproject com csharp3 png byte imageData new WebClient DownloadDa
  • C++ 中的“int”默认是“signed long int”吗?

    Is int默认情况下signed long int in C 它是否依赖于平台和 或编译器 如果是这样 怎么办 EDIT 以下任何一项是否保证是重复的 signed short int signed int signed long int
  • C++0x 初始值设定项列表示例

    我想看看这个现有代码示例如何利用 C 0x 初始化列表功能 示例0 include
  • 是否有可能将 *.pdb 文件包含到发布版本中以查看错误行号?

    我做了一个项目 所有设置都是默认的 当我在调试模式 构建配置 调试 下运行它并遇到异常时 它转储到我的自定义日志记录机制 其中包含错误行号 但是当我运行发布构建时 记录相同的异常 没有行号 只有方法抛出和记录调用堆栈 是否有可能在发布配置
  • 如何检查号码是否只有唯一的数字?

    例如 2345 是唯一的数字 因为没有数字显示两次 但 3324 不是唯一的数字 因为 3 出现了两次 我尝试使用 但我 代码 显示但我没有得到数字我得到了数字 编辑 你不能使用字符串 number 10 number 100 number
  • 尽管浮点数相同,但它们并不相等? [复制]

    这个问题在这里已经有答案了 下面的程序输出This No is not same 当两个数字相同时为什么会这样做 void main float f 2 7 if f 2 7 printf This No is same else prin
  • c 使用 lseek 以相反顺序复制文件

    我已经知道如何从一开始就将一个文件复制到另一个文件 但是我如何修改程序以按相反的顺序复制它 源文件应具有读取访问权限 目标文件应具有读写执行权限 我必须使用文件控制库 例如 FILE A File B should be ABCDEF FE
  • 多线程 - 比单线程慢

    当我使用多个线程而不是单线程运行程序时 它会变慢 不是应该更快吗 该程序应该遍历从起始目录开始的所有目录 并查找并打印所有名为 X 的文件 代码如下 while done pthread mutex lock lock if list is
  • 从 Golang 调用 C 函数

    我想在 Golang 中编写控制器逻辑并处理 json 和数据库 同时在 C 中使用我的数学处理模型 在我看来 调用 C 函数的开销必须尽可能低 就像设置寄存器 rcx rdx rsi rdi 一样 执行一些操作fastcall 并获取 r
  • Web 文本编辑器中的 RTF 格式

    网络上是否有支持 RTF 格式文档输入的文本编辑器 我知道这对 webdev 来说有点奇怪 但我需要从数据库中读取 RTF 文档 并在基于 Web 的文本编辑器中对其进行编辑 然后将其存储回 RTF 中 在我在转换工具上投入太多资金之前 我
  • 重定向 std::cout

    我需要一个类 在其对象的生命周期内将一个 ostream 重定向到另一个 ostream 经过一番修补后 我想出了这个 include
  • 如果我重新分配并且新大小为 0,会发生什么情况。这与释放等效吗?

    给出以下代码 int a NULL a calloc 1 sizeof a printf d n a a realloc a 0 printf d n a return 0 它返回 4078904 0 这个 realloc 相当于 free
  • 确定相关词的编程方式?

    使用网络服务或软件库 我希望能够识别与词根相关的单词 例如 座位 和 安全带 共享词根 座位 但 西雅图 不会被视为匹配 简单的字符串比较对于这类事情似乎是不可行的 除了定义我自己的字典之外 是否有任何库或 Web 服务不仅可以返回单词定义
  • 禁用实体框架的默认值生成(Code First)

    我数据库中有一个列不能为空 我想将其设置为默认值在数据库中 问题是实体框架似乎自己创建了一个默认值 例如 int gt 0 并且完全忽略了数据库中的默认值约束 有没有办法禁用实体框架的默认值 我发现您可以使用以下属性来装饰您的字段 Data
  • 如何使用 C# 将表格粘贴到 Ms-Word 文档的末尾

    我有一个预制的 Word 模板 其中有一个表格 我想打开它 然后在文档末尾添加 粘贴 另一个表格 问题是它不会转到文档的末尾 而是将新表格粘贴到原始表格的第一个单元格中 任何帮助将不胜感激 previous code copied a ta
  • 在 lua 中加载 C++ 模块时出现“尝试索引字符串值”错误

    我正在尝试使用 lua 用 C 编写的函数 下面给出的是cpp文件 extern C include lua h include lauxlib h include lualib h static int add 5 lua State L
  • C# 模式匹配

    我对 C 有点陌生 我正在寻找一个字符串匹配模式来执行以下操作 我有一个像这样的字符串 该书将在 唐宁街 11 号接待处 并将由主要医疗保健人员参加 我需要创建一个 span 标签来使用 startIndex 和 length 突出显示一些
  • 使用方法的状态模式

    我正在尝试使用方法作为状态而不是类来基于状态模式的修改版本来实现一个简单的状态机 如下所示 private Action
  • 是否可以检测流是否已被客户端关闭?

    简要介绍一下情况 我有一项服务可以通过套接字接收信息并发送回复 连接不安全 我想设置另一个可以为这些连接提供 TLS 的服务 这个新服务将提供单个端口并根据提供的客户端证书分发连接 我不想使用 stunnel 有几个原因 其中之一是每个接收

随机推荐

  • 如何将 io.Reader 转换为 io.ReadCloser? [复制]

    这个问题在这里已经有答案了 我有一个io Reader不需要关闭 stringReader strings NewReader shiny 我想将它传递给接收的方法io ReadCloser func readAndClose source
  • CPU 未充分利用。由于阻塞 I/O?

    我试图找到未充分利用 CPU 的 C 服务器应用程序的瓶颈所在 我认为这可能是由于磁盘 I O 性能不佳造成的 与应用程序本身无关 但我很难从这个假设中得出事实 应用程序从本地 MSMQ 队列读取消息 对每条消息进行一些处理 并在处理消息后
  • 移除嵌入对象时 pullAll

    我有包含以下文档的数据库 gt db bios find name first James pretty id 9 name first James last Gosling birth ISODate 1955 05 19T04 00 0
  • 从 java 运行命令提示符?

    嗨 我想使用 java 从命令提示符运行一些东西 我想进入以下目录C Program Files OpenOffice org 3 program 然后运行soffice headless accept socket host 127 0
  • 如何在 mongodb 中与聚合更新一起设置和取消设置?

    db getCollection name update bid 3860 set tl add multiply intField 24 60 60 1000 dateField unset intField 1
  • 我的 Web 服务器的版本控制

    我正在构建一个基于 Web2Py 的 Web 应用程序 并在远程 EC2 开发服务器上进行大部分开发 我想对整个系统进行版本控制 包括所有 python 模块 网页和 Apache 配置文件 这些文件显然分散在我的 Linux 机器上 但我
  • 如何判断一个变量是分配在栈还是堆中?

    在某处偶然发现这个面试问题 在C中 给定一个变量x 如何确定该变量的空间是在堆栈还是堆上分配的 有什么方法可以以编程方式找到它 而不必通过符号表等 并且查找空间是否在堆栈或堆中分配有任何实际意义吗 不 一般来说不是 你知道gcc吗 fspl
  • 如何在Pygame中画一个半透明的圆圈?

    我正在尝试在 Pygame 中画一个半透明的圆圈 这是我的代码 import pygame pygame init clock pygame time Clock screen pygame display set mode width h
  • Solr DataImportHandler:我可以使用 XPathEntityProcessor 从 xml 属性获取动态字段名称吗?

    我有一些 XML 要摄取到 Solr 中 这听起来像是一个旨在由 DataImportHandler 解决的用例 我想要做的是从一个 XML 属性中提取列名 并从另一属性中提取值 这是我的意思的一个例子
  • 跨流程使用事务

    我正在尝试使用 System Transactions TransactionScope 来协调一组进程 每个进程都执行一些数据库工作 最终 所有进程都需要通过一个父进程以原子方式提交或回滚 不幸的是 到目前为止我所尝试的一切都不起作用 我
  • Maven GWT 2.0 和 Eclipse

    有谁知道使用 maven 和 eclipse 使用新的 2 0 版本的 GWT 创建项目的好指南吗 我在让他们很好地合作方面遇到了很多问题 对于它的价值 我可以使用 Maven Eclipse 插件创建一个 gwt 项目 该项目工作正常 但
  • iOS - 更改 UIBarButtonItem 高度

    UIToolbar 有一个很好的调整大小选项 self navigationController toolbar frame 我想知道是否有人知道更改 UIBarButtonItem 高度的方法 我有一个高度为 117 像素的自定义工具栏
  • Rails where() 数组上的 SQL 查询

    我会尽可能地解释这一点 我对用户帖子有疑问 selected posts Posts where category gt Baseball 我想写下以下声明 这是伪术语 User where user has a post in selec
  • 自定义对话框中的 java.lang.IllegalStateException

    我是 Android 新手 正在开发自定义警报对话框 我想通过单击编辑按钮打开另一个对话框 代码如下 if v getId R id edt order System out println edit buton click System
  • 如何配置 charles-proxy 在 Linux 中与 chrome 一起使用 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我尝试设置 chrome 代理 google chrome proxy server 127 0 0 1 8888 Chrome 打开一个
  • 是否有处理 IO 的组长协议规范?

    在Erlang中 每个进程都有一个组长 当一个进程想要打印一些东西 即它调用io库或做类似的事情 时 它会向其组长发送一条消息 我的问题是 在哪里可以找到这些消息的规范 或者一般来说 明确小组领导者应该做什么 我通过一些实验设法发现 有时该
  • Angular 2 选择器中的 kebab-case (tslint)

    这是我的tslint json file rulesDirectory node modules codelyzer rules class name true comment format true check space curly t
  • 浮动操作按钮不会引发 OnClick 事件

    我有以下布局
  • 通过 Azure API 管理将 REST API 公开为 SOAP

    我们有一组现有的 REST API NET Core 我们需要将这些 API 公开为 SOAP 服务 希望通过使用 Azure API 管理来实现 这可能吗 我看过很多关于将 SOAP 服务公开为 REST API 的帖子 但没有看到相反的
  • c\c++ 中存储 COM 的 VT_DECIMAL 的正确类型是什么?

    我正在尝试为 ADO 编写一个包装器 A DECIMAL是一种类型 aCOM VARIANT可以是 当VARIANT类型是VT DECIMAL 我试图将其放入 C 原生数据类型中 并保留变量值 似乎正确的类型是 long double 但我