如何在 vapi 文件中编写 void 指针类型定义?

2024-03-06

我正在尝试编写一个 VAPI 文件来使用 unixODBC,其中一个函数被称为SQLAllocHandle:

// From <sqltypes.h>
#define SQL_API
typedef signed short int SQLSMALLINT;
typedef SQLSMALLINT      SQLRETURN;
typedef void *           SQLHANDLE;

// From <sql.h>
#define SQL_SUCCESS                0
#define SQL_SUCCESS_WITH_INFO      1
#define SQL_ERROR                 (-1)
#define SQL_INVALID_HANDLE        (-2)

#define SQL_HANDLE_ENV             1
#define SQL_HANDLE_DBC             2
#define SQL_HANDLE_STMT            3
#define SQL_HANDLE_DESC            4

#define SQL_NULL_HANDLE            0

SQLRETURN SQL_API SQLAllocHandle(SQLSMALLINT HandleType, SQLHANDLE InputHandle, SQLHANDLE *OutputHandle);

这是我第一次尝试编写 vapi 文件,但目前文档很少(Vala vapi 文件文档 https://stackoverflow.com/questions/2496656/vala-vapi-files-documentation).

调用代码应类似于以下内容:

using UnixOdbc;

int main(string[] args) {
  Handle h;
  if (AllocHandle (HandleType.ENV, NullHandle, out h) == Return.SUCCESS)
  ...
}

我特别想知道如何转换SQLHANDLE类型实际上只是一个void *(不透明的空指针)。

换句话说,什么会UnixOdbc.Handle在 vapi 文件中输入类似的内容?

我目前的方法是假装它很长:

[CCode (cheader_filename = "sql.h, sqltypes.h")]
namespace UnixOdbc {
    [CCode (cname = "SQLRETURN", cprefix = "SQL_")]
    public enum Return {
        SUCCESS,
        SUCCESS_WITH_INFO,
        ERROR,
        INVALID_HANDLE
    }
    [CCode (cname = "SQLSMALLINT", cprefix = "SQL_HANDLE_")]
    public enum HandleType {
        ENV,
        DBC,
        STMT,
        DESC
    }
    [CCode (cname = "SQLHANDLE")]
    public struct Handle: long {}

    [CCode (cname = "SQL_NULL_HANDLE")]
    public const Handle NULL_HANDLE;

    [CCode (cname = "SQLAllocHandle")]
    public static Return AllocHandle (HandleType handle_type, Handle input_handle, out Handle output_handle);
}

您可以尝试阅读旧版 VAPI 文件指南 https://docs.google.com/document/d/1Co-D09vA_N7YBjfyCnLojYHmzsBHg9cG5qnbzsNJ5lQ/edit。我会做:

[CCode(cname = "void")]
[Compact]
public class Handle {
   [CCode(cname = "SQLAllocHandle")]
   public static Return alocate_handle(HandleType type, Handle? input_handle, out Handle?  output_handle);
...
}

简单地忽略绑定SQL_NULL_HANDLE;它没有做任何有用的事情。

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

如何在 vapi 文件中编写 void 指针类型定义? 的相关文章

随机推荐

  • Rails:调用 .limit(5) 更改结果顺序

    我有一个搜索功能 基本上运行模型记录的有序列表 问题是每当我打电话时 search limit 5 结果的顺序与我调用时的顺序不同 search 这是我的一些方法 def self search server name pvp type i
  • 错误:您正在传递未定义的模块!请检查您传递给 i18next.use() 的对象

    由于上述问题 我的单元测试失败了 String ts import as i18n from i18next import initReactI18next from react i18next import BrowserLanguage
  • OSStatus NSOSStatusErrorDomain

    当我使用获取该属性时收到以下错误 AudioSessionGetProperty kAudioSessionProperty CurrentHardwareSampleRate size myAudioDescription mSample
  • 解析 1 TB 文本并有效计算每个单词出现的次数

    最近 我遇到一个面试问题 用任何语言创建一个算法 该算法应该执行以下操作 读取 1 TB 内容 对该内容中每个重复出现的单词进行计数 列出最常出现的 10 个单词 您能让我知道为此创建算法的最佳方法吗 Edit 好吧 假设内容是英文的 我们
  • 通过将一个变量拆分为多个变量来创建新列(在 R 中)

    我想通过分割数据框中的向量来创建新列 我有这样一个数据框 YEAR Variable1 Variable2 2009 000000 00000001 2010 000000 00000001 2011 000000 00000001 200
  • 在单例中使用删除的复制构造函数

    我已经实现了单例模式 例如this https stackoverflow com questions 270947 can any one provide me a sample of singleton in c 271104 2711
  • 在Golang中指定http请求的网络接口[重复]

    这个问题在这里已经有答案了 我使用 go 的 http 包来发出 http 请求 当 Ubuntu Linux 上有多个接口时 如何配置 go 的 http 客户端使用特定接口或 IP 地址来执行请求 默认的http客户端如何决定它使用哪个
  • 我应该如何将对象传递给函数?

    我是 C 编程新手 但我有 Java 编程经验 我需要有关如何在 C 中将对象传递给函数的指导 我是否需要传递指针 引用或非指针和非引用值 我记得在 Java 中不存在这样的问题 因为我们只传递保存对象引用的变量 如果您还可以解释在哪里使用
  • FirebaseAuth 禁用用户检查并注销?

    所以我有一个 onAuthStateChanged 流 我想检查用户是否已被 Firebase 控制台上的管理员禁用以注销用户并再次转到登录页面 这是我的流检查用户是否已登录 但是如何检查用户是否被 Firebase 控制台禁用 这是我的流
  • 如何在 iOS 9 中将 AVCaptureSession 与 Slide Over 和 Split View 结合使用?

    我的团队正在开发一套 SDK条码扫描 https github com pdf417 pdf417 ios 身份证扫描 https github com BlinkID blinkid ios and OCR https github co
  • 同时读取文件

    读取部分不是并发的 但处理是并发的 我这样表述标题是因为我最有可能使用该短语再次搜索此问题 我尝试后陷入僵局超越示例所以这对我来说是一次学习经历 我的目标是 逐行读取文件 最终使用缓冲区来执行行组 将文本传递给func 这确实有一些正则表达
  • 聚合初始化不支持构造函数访问[重复]

    这个问题在这里已经有答案了 鉴于下面的示例 我惊讶地发现 尽管默认构造函数被显式删除 或为此设置为默认值 但聚合初始化仍然是可能的 include
  • golang 从地图内的地图访问值

    我正在利用AVI Go SDK https pkg go dev github com Crypto89 sdk go v0 0 0 20190910135836 56c48329b7ce section readme获取 avi heal
  • XSLT 转换中的动态文档类型(正确使用结果文档指令)

    我正在使用 XSLT 需要根据参数在转换后的输出中动态生成文档类型 我听说这不能使用 XSLT 1 0 来完成 但可以使用 2 0 版本 使用结果文件 tag 到目前为止 从以下答案开始this https stackoverflow co
  • Windows DataGridView _RowCommand

    我的背景是 ASP Net 我被要求开发一个小型 Windows 应用程序 我尝试使用网格来呈现和选择数据 并且我认为 Windows 窗体中与 ASP Net 的 GridView 等效的是 DataGridView 我还不确定是否是这种
  • C++ iostream 中的奇怪 BUG?

    这是 iostream 中的错误吗 include
  • Android的convertView,用还是不用?

    文章中多线程提高性能 http android developers blogspot com 2010 07 multithreading for performance html来自 Android 开发者博客 convertView用
  • 如何在Android中更改进度条的进度颜色

    我在 Android 应用程序中使用水平进度条 并且我想更改其进度颜色 默认情况下为黄色 我怎样才能使用code 不是 XML 这不是以编程方式进行的 但我认为无论如何它可以帮助很多人 我尝试了很多 最有效的方法是将以下几行添加到 xml
  • 单元测试错误条件 - EINTR

    简而言之 如何对系统调用上的错误条件 例如 EINTR 进行单元测试 我正在研究的一个特定示例 这可能是一种单独的情况 是 当它返回带有 errno EINTR 的 EOF 时是否有必要再次调用 fclose 该行为取决于 fclose 的
  • 如何在 vapi 文件中编写 void 指针类型定义?

    我正在尝试编写一个 VAPI 文件来使用 unixODBC 其中一个函数被称为SQLAllocHandle From