如何在VB6中模拟.net Int64?

2024-03-30

如何在 VB6 中存储 Int64 数字以与 Win32 函数一起使用?
有没有办法在.net中定义像Int64这样的类型?并简单评估一下数字。


我认为许多 VB6 程序员都需要这样的东西,
因为一些 Win32 API 使用 _int64 作为参数。

我编写了一个函数,将货币转换为 API 兼容的结构。
将这些代码放入模块文件中。

Private Declare Sub CopyMemory lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Private Const SIZEOF_INT64 As Long = 8

Public Type Int64 'LowPart must be the first one in LittleEndian systems
    'required part
    LowPart  As Long
    HighPart As Long

    'optional part
    SignBit As Byte 'define this as long if you want to get minimum CPU access time.
End Type
'with the SignBit you can emulate both Int64 and UInt64 without changing the real sign bit in HighPart.
'but if you want to change it you can access it like this  mySign = (myVar.HighPart And &H80000000;)
'or turn on the sign bit using  myVar.HighPart = (myVar.HighPart Or &H80000000;)

Public Function CInt64(ByVal vCur As Currency) As Int64
    vCur = (CCur(vCur) * 0.0001@)
    Call CopyMemory(CInt64, vCur, SIZEOF_INT64)
End Function


现在您可以简单地使用 CInt64 创建一个 Int64 数字。
ex:


myRetVal = Win32APIFunctionWithOneInt64Param(CInt64(10000000))

'----OR

Dim myNum As Int64
myNum = CInt64(10000000)


对于更多操作:


Public Sub Op_Ev(Dest As Int64, Src As Int64) 'for setting the value.
    Call CopyMemory(Dest, Src, SIZEOF_INT64)
End Sub
Public Function Op_Eq(V1 As Int64, V2 As Int64) As Boolean 'for equal comparison.
    Op_Eq = (V1.LowPart = V2.LowPart)   : If Not Op_Eq Then Exit Function
    Op_Eq = (V1.HighPart = V2.HighPart)
End Function
Public Function Op_Gr(V1 As Int64, V2 As Int64, Optional ByVal IsUnsignedComparison As Boolean = False) As Boolean 'for grater comparison.
    If IsUnsignedComparison Then
        Dim H1 As Long, H2 As Long 'don't change the location of these definitions to optimize the function to prevent to execute two or more {SUB ESP, 4}
        H1 = (V1.HighPart And &H7FFFFFFF)   : H2 = (V2.HighPart And &H7FFFFFFF)
        Op_Gr = (H1 > H2)                   : If (H1 <> H2) Then Exit Function
        Dim HBS1 As Long, HBS2 As Long 'don't change the type of these two vars to byte to keep alignment for local variables.
        HBS1 = ((V1.HighPart And &H80000000) / &H80000000) 'export the sign bit and shift it to the right.
        HBS2 = ((V2.HighPart And &H80000000) / &H80000000) 'export the sign bit and shift it to the right.
        Op_Gr = (HBS1 > HBS2)               : If (HBS1 <> HBS2) Then Exit Function
    Else
        Op_Gr = (V1.HighPart > V2.HighPart) : If (V1.HighPart <> V2.HighPart) Then Exit Function
    End If
    Op_Gr = (V1.LowPart > V2.LowPart)
End Function
Public Function Op_Ls(V1 As Int64, V2 As Int64, Optional ByVal IsUnsignedComparison As Boolean = False) As Boolean 'for less comparison.
    If IsUnsignedComparison Then
        Dim H1 As Long, H2 As Long 'don't change the location of these definitions to optimize the function to prevent to execute two or more {SUB ESP, 4}
        H1 = (V1.HighPart And &H7FFFFFFF)   : H2 = (V2.HighPart And &H7FFFFFFF)
        Op_Ls = (H1 < H2)                   : If (H1 <> H2) Then Exit Function
        Dim HBS1 As Long, HBS2 As Long 'don't change the type of these two vars to byte to keep alignment for local variables.
        HBS1 = ((V1.HighPart And &H80000000) / &H80000000) 'export the sign bit and shift it to the right.
        HBS2 = ((V2.HighPart And &H80000000) / &H80000000) 'export the sign bit and shift it to the right.
        Op_Ls = (HBS1 < HBS2)               : If (HBS1 <> HBS2) Then Exit Function
    Else
        Op_Ls = (V1.HighPart < V2.HighPart) : If (V1.HighPart <> V2.HighPart) Then Exit Function
    End If
    Op_Ls = (V1.LowPart < V2.LowPart)
End Function
Public Function Op_Cmp(V1 As Int64, V2 As Int64, Optional ByVal IsUnsignedComparison As Boolean = False) As Long 'for comparison.
    If Op_Gr(V1, V2, IsUnsignedComparison) Then
        Op_Cmp = 1
    ElseIf Op_Ls(V1, V2, IsUnsignedComparison) Then
        Op_Cmp = -1
    Else
        Op_Cmp = 0
    End If
End Function
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在VB6中模拟.net Int64? 的相关文章

  • 为什么我们需要将可选值显式转换为 Any?

    根据苹果文档 Any 类型表示任何类型的值 包括可选类型 如果您使用可选值 其中值 预期类型为 Any 如果您确实需要使用可选的 value 作为 Any 值 您可以使用 as 运算符显式转换 可选为Any 如下所示 var things
  • 奇怪的 Java 转换异常。为什么我不能将 Long 转换为 Float?

    为什么我不能将 Long 转换为 Float 我收到此错误消息 java lang ClassCastException java lang Long 无法转换为 java lang Float 为什么这是个问题 我尝试转换的数字是域 10
  • 捕获 Exception 对象是否安全

    我使用依赖于异常的 Java 库 简化代码如下 try val eventTime eventTimeString as Date catch case e Exception gt logger error s Can t parse e
  • 更新 KB 2687323 后,VB6 IDE 无法加载 MSCOMCTL.OCX

    Windows 更新安装安全更新后KB2687323 http support microsoft com kb 2687323 我的 VB6 项目无法加载 显示的错误消息是 无法加载 project vbp path MSCOMCTL O
  • 如何将数字(如 int)转换为“Number”?

    这可能是基本问题 但我找不到有用的东西 问题是 如何转换double or int价值Number类型 更具体地说oracle jbo domain Number 我尝试了以下方法 对于整数值 int i 9 Integer y new I
  • 从 TempData 转换对象集合 (MVC C#)

    我试图将我的对象集合放入 TempData 中 如下所示 HttpPost public ActionResult PandoraRemovalTotal2 List
  • Visual Basic 6.0 中的无效限定符错误

    在 Visual Basic 6 0 程序中 我有一个字符串 sTemp 我想确保它不包含引号 我有这行 If sTemp Contains Then 但是当我在 sTemp 之后输入句点时 我没有从智能感知中得到任何信息 并且当我尝试编译
  • SQL 中的双冒号 `::` 表示法

    我捡到了某人的代码 以下是其中的一部分WHERE条款 这里的双冒号表示什么 b date completed gt a dc date INTERVAL 1 DAY 7 20 00 它根据 RDBMS 的不同而有所不同 但如果我猜对的话 那
  • 检查变量是否为 double 数据类型

    我需要检查我拥有的变量是否属于该数据类型double 这是我尝试过的 try double price Convert ToDouble txtPrice Text catch FormatException MessageBox Show
  • 如何将 interface{} 转换回其原始结构?

    我需要一种方法将结构 接口动态转换回其原始对象 我可以在里面添加方法 函数 基本上我需要这样的东西 MyStruct gt Interface gt MyStruct 在最终转换时 除了结构内部的内容之外 我对原始结构一无所知 所以我不能这
  • 是否可以重载 *static_cast* 运算符?

    我定义了一个类A 实际属性无关 是否可以定义一个专业化static cast
  • 将一组 Java 对象转换为另一组对象的最佳方式是什么?

    这是一个真正的新手提出的基本 Java 问题 我有一组实现某个接口 接口 MyIfc 的Java对象 属于 MyClass 类 我有一组这些对象存储在我的类中的私有变量中 声明如下 protected Set
  • ReDim 在 VB6 中保留为多维数组

    我正在使用 VB6 我需要做一个ReDim Preserve到多维数组 Dim n m As Integer n 1 m 0 Dim arrCity As String ReDim arrCity n m n n 1 m m 1 ReDim
  • 实现 `memcpy()`:需要 `unsigned char *`,还是只需要 `char *`?

    我正在实施一个版本memcpy 能够与它一起使用volatile 使用安全吗char 或者我需要unsigned char volatile void memcpy v volatile void dest const volatile v
  • Visual Basic 6:如何使应用程序在任务栏中可见?

    我已将属性 ShowInTaskBar 设置为 true 但我的应用程序在任务栏中不可见 表单具有最小化 最大化和关闭按钮 当我单击最小化时 表单最小化为屏幕左下角的小表单 但不显示在任务栏中 你的表单是模态的吗 MyForm Show v
  • 基于 Windows 8 ARM 的平板电脑上的 VB6

    随着 Windows 8 将支持 VB6 我的问题是 Microsoft 是否在任何地方表示 是或否 VB6 应用程序将在基于 ARM 的平板电脑上运行 如果没有 是否有任何 ARM 模拟器 以便我们可以在 Windows 8 ARM 平板
  • 如何将 char 转换为 unsigned int?

    我有一个字符数组 它实际上用作字节数组 而不是用于存储文本 在数组中 有两个特定字节表示我需要存储到无符号 int 值中的数值 下面的代码解释了设置 char bytes bytes 2 bytes 0 0x0C For the sake
  • 自动铸造[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我现在正在遭受脑放屁的痛苦 我以前曾经这样做过 但我不记得确切的语法 也无法查看我编写的代码 因为我当时在另一家公司工作 我有这样的安排 class
  • 我可以在C中直接比较int和size_t吗?

    我可以比较一个int and a size t像这样的变量 int i 1 size t y 2 if i y Do something 或者我必须输入其中之一 只要满足以下条件 它就是安全的int为零或正数 如果它是负数 并且size t
  • 在基类集合上调用派生方法

    我有一个名为 A 的抽象类 以及实现 A 的其他类 B C D E 我的派生类持有不同类型的值 我还有一个 A 对象的列表 abstract class A class B class A public int val get privat

随机推荐

  • 在 Vue.js 中隐藏组件

    有没有办法可以控制共享组件在另一个组件中的渲染 我有一个组件 它是一个底部栏 需要在一些具体组件中禁用 不渲染 我正在所有组件都使用的模板中渲染底部栏 编辑 我正在使用 webpack 正如罗伊所说 您可以拥有一个属性来调节组件的渲染 假设
  • SDL-Mixer 音频在启动 Reactive-Banana 输入循环时停止

    我一直在开发一款使用多个音轨的游戏 其音量根据鼠标运动实时调整 我一般使用 SDl Mixer 来处理音频 使用 Reactive Banana 来处理游戏 问题是 一开始就开始播放的曲目在输入循环开始时停止播放 原因可能是其他原因 但我想
  • 如何在powershell中进行TDD和单元测试?

    随着微软将 powershell 强加到所有新的服务器产品中 我开始 不情愿地 认为我需要认真对待它 认真对待 的一部分是 TDD 您是否找到了对 Power shell 脚本进行单元测试的好方法 我找到了嘲笑的样本极客噪音先生 http
  • Spring Boot:如何使用 @Validated 注释在 JUnit 中测试服务?

    我正在尝试为我的 Spring Boot 应用程序构建一组约束验证器 我想构建一些验证注释 例如 NotNull 顺便说一句 验证应该支持验证组 所以我有一个带有验证注释的简单项目模型 public class Item NotNull g
  • 如何在Android中为整个应用程序设置背景?

    在我的应用程序中 我有很多层 我不想为每个层设置背景图像 而是想一劳永逸地设置背景 我怎样才能做到这一点 看一眼将主题应用于活动或应用程序 http developer android com guide topics ui themes
  • 自定义配置设置,自定义ClientSettingsSection

    考虑以下配置部分
  • 在 Raspberry Pi 中解码视频而不使用 OpenMAX?

    我正在寻找在 Raspberry Pi 上解码视频的示例directly 不使用 OpenMAX 这解释了多媒体软件的不同层 还有一个此处未显示的附加层 即 MMAL https github com raspberrypi userlan
  • 远程拒绝主控 -> 主控(预接收挂钩拒绝)

    我正在使用 Rails 3 2 当我尝试推送到 heroku 时收到错误 git push heroku master Counting objects 496 done Delta compression using up to 8 th
  • 应用程序中的 Firestore 查询给出权限被拒绝,而模拟器工作正常

    在我的基于 Firestore 的应用程序中 我使用以下查询来检索一些数据 FirebaseFirestore getInstance collection events document eventId collection instan
  • 如何只获取用户路径变量?

    Echo PATH 回报system路径变量 user路径变量 如何只得到user路径变量 The system PATH变量的值存储在 Windows 注册表中Path类型的REG EXPAND SZ包含对环境变量的引用 例如 Syste
  • 如何在 JSON 文件中进行搜索?

    如何创建一个搜索表单来搜索 JSON 文件中输入的术语 因此 如果搜索词等于位置对象内的标题 它应该返回该对象信息 如果没有匹配 则向用户反馈没有找到项目 我创建了一个搜索输入
  • 当您不需要将某些内容定义为动态来 with-redefs 时,将某些内容定义为动态的意义何在?

    在我看来 这with redefs可以做一切binding动态符号可以做到 只是它没有需要的限制 dynamic元数据 那么我什么时候应该使用其中一种而不是另一种呢 除了要求 dynamic元数据 binding还创建仅在当前线程中可见的绑
  • 如何从 Azure 函数返回 xlsx 文件?

    我见过一些人尝试过 我无法重现他们的结果 乐于使用任何语言 我可以从 HTTP 触发器创建 xlsx 我想从另一个 HTTP 触发器返回该文件 如果您已经生成了该文件 则返回它只是创建一个带有附件的 HTTP 响应 var result n
  • 使用 Python 字典作为键(非嵌套)

    Python 不允许将字典用作其他字典中的键 是否有使用非嵌套字典作为键的解决方法 更复杂的不可散列对象和我的具体用例的一般问题是搬到这里 https stackoverflow com questions 1611797 using no
  • C++ 模板参数更改对指针的引用

    也许我不知道如何搜索 但事实上我找不到任何人谈论这个 我的结构有一个non type论证取决于type争论 template lt typename SpecType SpecType NonType gt struct Struct Wh
  • yii 自定义错误页面,例如 404、403、500

    我正在尝试为所有错误消息创建单独的文件 404 403 500 等 这样我就可以为它们进行定制设计 如果可能的话 我不希望页眉和页脚也包含在我的错误页面中 现在我有这个 在我的站点控制器 php并把错误404 php进入我的浏览量 站点 f
  • 如何分析 Java 中的线程?

    我的应用程序中有生产者和消费者线程 我需要对它们进行分析以查看线程的性能 每个线程进入睡眠和等待之前所花费的时间等 并采取纠正措施以提高应用程序的整体效率 关于如何解决这个问题有什么建议吗 我个人使用 YourKit java profil
  • 在 Django 中接受电子邮件地址作为用户名

    有没有一种好方法可以在 Django 中执行此操作 而无需滚动我自己的身份验证系统 我希望用户名是用户的电子邮件地址 而不是他们创建用户名 请指教 对于其他想要这样做的人 我建议看一下django 电子邮件作为用户名 https githu
  • 使用 docker 和 --privileged 构建

    我在用着本指南 https aws amazon com blogs ai build a voice kit with amazon lex and a raspberry pi 使用 Amazon Lex 和 Raspberry Pi
  • 如何在VB6中模拟.net Int64?

    如何在 VB6 中存储 Int64 数字以与 Win32 函数一起使用 有没有办法在 net中定义像Int64这样的类型 并简单评估一下数字 我认为许多 VB6 程序员都需要这样的东西 因为一些 Win32 API 使用 int64 作为参