나는 인 unixODBC 기능 중 하나를 사용하는 VAPI 파일을 작성하기 위해 노력하고있어이 SQLAllocHandle
라고 :vapi 파일에 무효 포인터 typedef를 쓰는 방법은 무엇입니까?
// 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 files documentation).
호출 코드는 다음에 비슷한 같아야합니다
using UnixOdbc;
int main(string[] args) {
Handle h;
if (AllocHandle (HandleType.ENV, NullHandle, out h) == Return.SUCCESS)
...
}
특히 난 정말 그냥 void *
(불투명 무효 포인터)입니다 SQLHANDLE
형식을 변환하는 방법을 알고 싶습니다.
즉, 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);
}
코드에 인터 레스트 된 사용자를 위해 github 저장소를 만들었습니다. https://github.com/antiochus/unixodbc-vala –