首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在vapi文件中编写空指针类型?

如何在vapi文件中编写空指针类型?
EN

Stack Overflow用户
提问于 2013-09-26 15:39:39
回答 1查看 462关注 0票数 3

我试图编写一个VAPI文件来使用unixODBC,其中一个函数叫做SQLAllocHandle

代码语言:javascript
复制
// 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文件文档)。

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

代码语言:javascript
复制
using UnixOdbc;

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

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

换句话说,在vapi文件中,UnixOdbc.Handle类型会是什么样子?

我目前的做法是假装这是一个很长的过程:

代码语言:javascript
复制
[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);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-26 20:29:49

你可以试着读旧VAPI文件指南。我会说:

代码语言:javascript
复制
[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的绑定;它没有做任何有用的事情。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19032636

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档