D - Help Translating API
- Juarez Rudsatz <juarez correio.com> Mar 11 2002
- "Walter" <walter digitalmars.com> Mar 11 2002
- "OddesE" <OddesE_XYZ hotmail.com> Mar 12 2002
- Juarez Rudsatz <juarez correio.com> Mar 13 2002
- "Pavel Minayev" <evilone omen.ru> Mar 13 2002
- Juarez Rudsatz <juarez correio.com> Mar 13 2002
- "Pavel Minayev" <evilone omen.ru> Mar 13 2002
People,
I need some help from converting for converting a C API to a D module.
I have some questions and dont now how solving that :
1 - This tranlation is correct ?
long __stdcall isc_attach_database (
int *,
short,
char *,
isc_db_handle *,
short,
char *
);
To :
extern(C) {
int isc_attach_database(
int *,
short *,
char *,
isc_db_handle *,
char *
)
}
2 - This tranlation is correct ?
long __cdecl isc_event_block (
char * *,
char * *,
unsigned short,
...
);
To :
extern(C) {
int isc_event_block(
char * *,
char * *,
unsigned short,
...
);
}
3 - in D long is 64 bits long ?
4 - This translation is correct ?
typedef struct isc_blob_ctl{
long (*ctl_source)();
struct isc_blob_ctl *ctl_source_handle;
short ctl_to_sub_type;
short ctl_from_sub_type;
} *ISC_BLOB_CTL;
To :
struct isc_blob_ctl{
int() ctl_source;
isc_blob_ctl* ctl_source_handle;
short ctl_to_sub_type;
short ctl_from_sub_type;
};
isc_blob_ctl* ISC_BLOB_CTL;
5 - Is correct ?
typedef void *isc_att_handle;
To :
typedef void* isc_att_handle;
6 - For compiling and liking what I need ?
a ) the module ibase.d
b) the ibase.lib
c ) the ibase.dll
How this 3 things have connection ?
Thanks
Juarez Rudsatz
Mar 11 2002
"Juarez Rudsatz" <juarez correio.com> wrote in message news:Xns91CEEFEBAB2FEjuarezcom 63.105.9.61...People, I need some help from converting for converting a C API to a D module. I have some questions and dont now how solving that : 1 - This tranlation is correct ? long __stdcall isc_attach_database ( int *, short, char *, isc_db_handle *, short, char * ); To : extern(C) { int isc_attach_database( int *, short *, char *, isc_db_handle *, char * ) }
stdcall translates to extern (Windows)2 - This tranlation is correct ? long __cdecl isc_event_block ( char * *, char * *, unsigned short, ... ); To : extern(C) { int isc_event_block( char * *, char * *, unsigned short, ... ); }
unsigned short translates to ushort.3 - in D long is 64 bits long ?
Yes.4 - This translation is correct ? typedef struct isc_blob_ctl{ long (*ctl_source)(); struct isc_blob_ctl *ctl_source_handle; short ctl_to_sub_type; short ctl_from_sub_type; } *ISC_BLOB_CTL; To : struct isc_blob_ctl{ int() ctl_source;
No, int(*ctl_source)();isc_blob_ctl* ctl_source_handle; short ctl_to_sub_type; short ctl_from_sub_type; }; isc_blob_ctl* ISC_BLOB_CTL; 5 - Is correct ? typedef void *isc_att_handle; To : typedef void* isc_att_handle;
alias void* isc_att_handle;6 - For compiling and liking what I need ? a ) the module ibase.d b) the ibase.lib c ) the ibase.dll How this 3 things have connection ?
It would be analogous to C. dlls are only necessary if you want to use them. They are not required like in java.
Mar 11 2002
"Juarez Rudsatz" <juarez correio.com> wrote in message news:Xns91CEEFEBAB2FEjuarezcom 63.105.9.61...People, I need some help from converting for converting a C API to a D module. I have some questions and dont now how solving that : 1 - This tranlation is correct ?
I marked two spots in your source with an arrow: // <----- I think they are translated wrong.long __stdcall isc_attach_database ( int *, short, // <---- char *, isc_db_handle *, short, // <---- char * ); To : extern(C) { int isc_attach_database( int *, short *, // <---- Should be short, not short *? char *, isc_db_handle *,
short?char * )
Thanks Juarez Rudsatz
Read Walters comment for other points. Hope this helps. -- Stijn OddesE_XYZ hotmail.com http://OddesE.cjb.net __________________________________________ Remove _XYZ from my address when replying by mail
Mar 12 2002
Is some mistakes when translating.
I need some help again. I have some doubts :
1 - Array within a structure have the Zero Position ?
typedef struct paramvary {
ISC_USHORT vary_length;
unsigned char vary_string [10];
} PARAMVARY;
could be translated to :
struct PARAMVARY {
ISC_USHORT vary_length;
ubyte[10] vary_string;
};
2 - Far pointer are banished ?
The calling convetion is defined by following macros :
#if (defined(_MSC_VER) && defined(_WIN32)) || \
(defined(__BORLANDC__) && (defined(__WIN32__) || defined(__OS2__)))
#define ISC_FAR
#define ISC_EXPORT __stdcall
#define ISC_EXPORT_VARARG __cdecl
typedef __int64 ISC_INT64;
typedef unsigned __int64 ISC_UINT64;
#define ISC_INT64_DEFINED
#else /* Not Windows/NT */
#if (defined(__IBMC__) && defined(__OS2__))
#define ISC_FAR
#define ISC_EXPORT _System
#define ISC_EXPORT_VARARG ISC_EXPORT
#else /* not IBM C Set++ for OS/2 */
#if ( defined( _Windows) || defined( _WINDOWS))
#define ISC_FAR __far
#define ISC_EXPORT ISC_FAR __cdecl __loadds __export
#define ISC_EXPORT_VARARG ISC_EXPORT
#else /* Not Windows/NT, OS/2 or Windows */
#define ISC_FAR
#define ISC_EXPORT
#define ISC_EXPORT_VARARG
#endif /* Windows and Not Windows/NT or OS/2
*/
#endif /* IBM C Set++ for OS/2 */
#endif /* Windows/NT */
My conclusion is :
ISC_FAR : ''
ISC_EXPORT : '__stdcall'
ISC_EXPORT_VARARG : '__cdecl'
This is right ?
and then ->
typedef struct {
short sqllen;
char ISC_FAR *sqldata;
} XSQLVAR;
can be translated to :
struct XSQLVAR {
short sqllen;
char* sqldata;
};
Mar 13 2002
"Juarez Rudsatz" <juarez correio.com> wrote in message news:Xns91D07D65AE450juarezcom 63.105.9.61...Is some mistakes when translating. I need some help again. I have some doubts : 1 - Array within a structure have the Zero Position ?
What do you mean, "zero position"? Array in structure doesn't differ from any other array...typedef struct paramvary { ISC_USHORT vary_length; unsigned char vary_string [10]; } PARAMVARY; could be translated to : struct PARAMVARY { ISC_USHORT vary_length; ubyte[10] vary_string; };
Yep, right. Just remove that ; after the }2 - Far pointer are banished ?
Since D is 32-bit and higher, there is no need in near/far pointers.typedef struct { short sqllen; char ISC_FAR *sqldata; } XSQLVAR; can be translated to : struct XSQLVAR { short sqllen; char* sqldata; };
Yes.
Mar 13 2002
"Pavel Minayev" <evilone omen.ru> wrote in news:a6nrcv$1qsn$1 digitaldaemon.com:1 - Array within a structure have the Zero Position ?
What do you mean, "zero position"? Array in structure doesn't differ from any other array...
In struct estrutura { char[5] array } , array has 5 bytes + the lenght of array?
Mar 13 2002
"Juarez Rudsatz" <juarez correio.com> wrote in message news:Xns91D0D9083BA65juarezcom 63.105.9.61...In struct estrutura { char[5] array } , array has 5 bytes + the lenght of
Of course no. It's a static array, and thus stored in the same way as in C/C++. Only dynamic arrays store their length at run-time.
Mar 13 2002









"Walter" <walter digitalmars.com> 