`
ideage
  • 浏览: 319720 次
社区版块
存档分类
最新评论

让D访问其他应用程序

阅读更多

要使用D,就要和其他应用配合。D和C是二进制兼容的。可以转换C的头文件为D的文件,然后访问C的库,或者兼容C的库。

步骤:
1.转换C的头文件。具体办法http://www.digitalmars.com/d/htomodule.html,也可以使用HTOD工具 http://www.digitalmars.com/d/htod.html,下载在http://ftp.digitalmars.com/d/htod.zip
2.转换动态库,生成D可以链接的lib文件,D链接的格式是Intel32为OMF格式,和微软使用的lib文件格式COFF不兼容,转换格式的程序我没有找到 ,虽然介绍了。可使用的是implib,用法http://www.digitalmars.com/ctg/implib.html,implib /s kernel32.lib kernel32.dll 下载地址http://ftp.digitalmars.com/bup.zip,包含了几个工具。

创建导入函数定义def文件的工具[url]http://www.dprogramming.com/linkdef.php [/url]

3.例子,转换SQLServer的头文件,SQLDB.H,SQLFRONT.H。
module sqldb;
extern (C):
alias double DOUBLE;
/*****************************************************************************
* DBPROCESS, LOGINREC and DBCURSOR                                           *
*****************************************************************************/
alias void DBPROCESS;
alias void LOGINREC;
alias void DBCURSOR;
alias void DBHANDLE;

alias void *PDBPROCESS;
alias void *PLOGINREC;
alias void *PDBCURSOR;
alias void *PDBHANDLE;
alias int  function()LGFARPROC;

/*****************************************************************************
* Win32 compatibility datatype definitions                                   *
* Note: The following datatypes are provided for Win32 compatibility.        *
* Since some of the datatypes are already defined in unrelated include files *
* there may definition duplication.  Every attempt has been made to check    *
* for such problems.                                                         *
*****************************************************************************/

alias short SHORT;
alias int INT;
alias uint UINT;
alias ushort USHORT;
alias uint ULONG;
alias char CHAR;
alias INT *LPINT;
alias char BYTE;
alias CHAR *LPSTR;
alias BYTE *LPBYTE;
alias void *LPVOID;
alias CHAR *LPCSTR;
alias int BOOL;

/*****************************************************************************
* DB-Library datatype definitions                                            *
*****************************************************************************/
const DBMAXCHAR = 256;
alias INT RETCODE;
alias INT STATUS;
// DB-Library datatypes
alias char DBCHAR;
alias ubyte DBBINARY;
alias ubyte DBTINYINT;
alias short DBSMALLINT;
alias ushort DBUSMALLINT;
alias int DBINT;
alias double DBFLT8;
alias ubyte DBBIT;
alias ubyte DBBOOL;
alias float DBFLT4;
alias int DBMONEY4;

alias DBFLT4 DBREAL;
alias UINT DBUBOOL;

struct dbdatetime4
{
    USHORT numdays;
    USHORT nummins;
}
alias dbdatetime4 DBDATETIM4;


struct dbvarychar
{
    DBSMALLINT len;
    DBCHAR [256]str;
}
alias dbvarychar DBVARYCHAR;

struct dbvarybin
{
    DBSMALLINT len;
    BYTE [256]array;
}
alias dbvarybin DBVARYBIN;

struct dbmoney
{
    DBINT mnyhigh;
    ULONG mnylow;
}
alias dbmoney DBMONEY;

struct dbdatetime
{
    DBINT dtdays;
    ULONG dttime;
}
alias dbdatetime DBDATETIME;

// DBDATEREC structure used by dbdatecrack
struct dbdaterec
{
  int     year;         // 1753 - 9999
	INT     quarter;      // 1 - 4
	INT     month;        // 1 - 12
	INT     dayofyear;    // 1 - 366
	INT     day;          // 1 - 31
	INT     week;         // 1 - 54 (for leap years)
	INT     weekday;      // 1 - 7  (Mon - Sun)
	INT     hour;         // 0 - 23
	INT     minute;       // 0 - 59
	INT     second;       // 0 - 59
	INT     millisecond;  // 0 - 999
}
alias dbdaterec DBDATEREC;

const MAXNUMERICLEN = 16;

const MAXNUMERICDIG = 38;
const DEFAULTPRECISION = 18;

const DEFAULTSCALE = 0;
struct dbnumeric
{
    BYTE precision;
    BYTE scale;
    BYTE sign;
    BYTE [16]val;
}
alias dbnumeric DBNUMERIC;

alias DBNUMERIC DBDECIMAL;



const MAXCOLNAMELEN = 30;

const MAXTABLENAME = 30;

struct _N1
{
    DBINT SizeOfStruct;
    CHAR [31]Name;
    CHAR [31]ActualName;
    CHAR [31]TableName;
    SHORT Type;
    DBINT UserType;
    DBINT MaxLength;
    BYTE Precision;
    BYTE Scale;
    BOOL VarLength;			// TRUE, FALSE
    BYTE Null;          // TRUE, FALSE or DBUNKNOWN
    BYTE CaseSensitive; // TRUE, FALSE or DBUNKNOWN
    BYTE Updatable;     // TRUE, FALSE or DBUNKNOWN
    BOOL Identity; 			// TRUE, FALSE
}
alias _N1 DBCOL;
alias _N1 *LPDBCOL;


const MAXSERVERNAME = 30;
const MAXNETLIBNAME = 255;

const MAXNETLIBCONNSTR = 255;
struct _N2
{
    DBINT SizeOfStruct;
    BYTE ServerType;
    USHORT ServerMajor;
    USHORT ServerMinor;
    USHORT ServerRevision;
    CHAR [31]ServerName;
    CHAR [256]NetLibName;
    CHAR [256]NetLibConnStr;
}
alias _N2 DBPROCINFO;
alias _N2 *LPDBPROCINFO;

struct _N3
{
    DBINT SizeOfStruct;
    ULONG TotCols;
    ULONG TotRows;
    ULONG CurRow;
    ULONG TotRowsFetched;
    ULONG Type;
    ULONG Status;
}
alias _N3 DBCURSORINFO;
alias _N3 *LPDBCURSORINFO;


/*****************************************************************************
* Pointer Datatypes                                                          *
*****************************************************************************/

alias LPINT LPCINT;
alias LPBYTE LPCBYTE;
alias USHORT *LPUSHORT;
alias LPUSHORT LPCUSHORT;
alias DBINT *LPDBINT;
alias LPDBINT LPCDBINT;
alias DBBINARY *LPDBBINARY;
alias LPDBBINARY LPCDBBINARY;
alias DBDATEREC *LPDBDATEREC;
alias LPDBDATEREC LPCDBDATEREC;
alias DBDATETIME *LPDBDATETIME;
alias LPDBDATETIME LPCDBDATETIME;


/*****************************************************************************
* General #defines                                                           *
*****************************************************************************/

const SERVTYPE_UNKNOWN = 0;

const SERVTYPE_MICROSOFT = 1;
// Used by dbcolinfo
enum CI_TYPES
{
    CI_REGULAR = 1,
    CI_ALTERNATE,
    CI_CURSOR,
}

const DB_IN = 1;
const DB_OUT = 2;

const BCPMAXERRS = 1; // bcp_control parameter
const BCPFIRST = 2;
const BCPLAST = 3;
const BCPBATCH = 4;
const BCPKEEPNULLS = 5;
const BCPABORT = 6;

const TRUE = 1;
const FALSE = 0;

const TINYBIND = 1;
const SMALLBIND = 2;
const INTBIND = 3;
const CHARBIND = 4;
const BINARYBIND = 5;
const BITBIND = 6;
const DATETIMEBIND = 7;
const MONEYBIND = 8;
const FLT8BIND = 9;
const STRINGBIND = 10;
const NTBSTRINGBIND = 11;
const VARYCHARBIND = 12;
const VARYBINBIND = 13;
const FLT4BIND = 14;
const SMALLMONEYBIND = 15;
const SMALLDATETIBIND = 16;
const DECIMALBIND = 17;
const NUMERICBIND = 18;
const SRCDECIMALBIND = 19;
const SRCNUMERICBIND = 20;

alias SRCNUMERICBIND MAXBIND;
const DBSAVE = 1;
const DBNOSAVE = 0;
const DBNOERR = -1;
const DBFINDONE = 0x04;
const DBMORE = 0x10;
const DBMORE_ROWS = 0x20;

const MAXNAME = 31;

const DBTXTSLEN = 8;
const DBTXPLEN = 16;
const INT_EXIT = 0;
const INT_CONTINUE = 1;
const INT_CANCEL = 2;

// dboptions
const DBBUFFER = 0;
const DBOFFSET = 1;
const DBROWCOUNT = 2;
const DBSTAT = 3;
const DBTEXTLIMIT = 4;
const DBTEXTSIZE = 5;
const DBARITHABORT = 6;
const DBARITHIGNORE = 7;
const DBNOAUTOFREE = 8;
const DBNOCOUNT = 9;
const DBNOEXEC = 10;
const DBPARSEONLY = 11;
const DBSHOWPLAN = 12;

const DBSTORPROCID = 13;

const DBCLIENTCURSORS = 16;
const DBSETTIME = 17;

const DBQUOTEDIDENT = 18;

// Data Type Tokens
const SQLVOID = 0x1f;
const SQLTEXT = 0x23;
const SQLVARBINARY = 0x25;
const SQLINTN = 0x26;
const SQLVARCHAR = 0x27;
const SQLBINARY = 0x2d;
const SQLIMAGE = 0x22;
const SQLCHAR = 0x2f;
const SQLINT1 = 0x30;
const SQLBIT = 0x32;
const SQLINT2 = 0x34;
const SQLINT4 = 0x38;
const SQLMONEY = 0x3c;
const SQLDATETIME = 0x3d;
const SQLFLT8 = 0x3e;
const SQLFLTN = 0x6d;
const SQLMONEYN = 0x6e;
const SQLDATETIMN = 0x6f;
const SQLFLT4 = 0x3b;
const SQLMONEY4 = 0x7a;
const SQLDATETIM4 = 0x3a;
const SQLDECIMAL = 0x6a;

const SQLNUMERIC = 0x6c;
// Data stream tokens
const SQLCOLFMT = 0xa1;
const OLD_SQLCOLFMT = 0x2a;
const SQLPROCID = 0x7c;
const SQLCOLNAME = 0xa0;
const SQLTABNAME = 0xa4;
const SQLCOLINFO = 0xa5;
const SQLALTNAME = 0xa7;
const SQLALTFMT = 0xa8;
const SQLERROR = 0xaa;
const SQLINFO = 0xab;
const SQLRETURNVALUE = 0xac;
const SQLRETURNSTATUS = 0x79;
const SQLRETURN = 0xdb;
const SQLCONTROL = 0xae;
const SQLALTCONTROL = 0xaf;
const SQLROW = 0xd1;
const SQLALTROW = 0xd3;
const SQLDONE = 0xfd;
const SQLDONEPROC = 0xfe;
const SQLDONEINPROC = 0xff;
const SQLOFFSET = 0x78;
const SQLORDER = 0xa9;

const SQLLOGINACK = 0xad;
// Ag op tokens
const SQLAOPCNT = 0x4b;
const SQLAOPSUM = 0x4d;
const SQLAOPAVG = 0x4f;
const SQLAOPMIN = 0x51;
const SQLAOPMAX = 0x52;
const SQLAOPANY = 0x53;

const SQLAOPNOOP = 0x56;
// Error numbers (dberrs) DB-Library error codes
const SQLEMEM = 10000;
const SQLENULL = 10001;
const SQLENLOG = 10002;
const SQLEPWD = 10003;
const SQLECONN = 10004;
const SQLEDDNE = 10005;
const SQLENULLO = 10006;
const SQLESMSG = 10007;
const SQLEBTOK = 10008;
const SQLENSPE = 10009;
const SQLEREAD = 10010;
const SQLECNOR = 10011;
const SQLETSIT = 10012;
const SQLEPARM = 10013;
const SQLEAUTN = 10014;
const SQLECOFL = 10015;
const SQLERDCN = 10016;
const SQLEICN = 10017;
const SQLECLOS = 10018;
const SQLENTXT = 10019;
const SQLEDNTI = 10020;
const SQLETMTD = 10021;
const SQLEASEC = 10022;
const SQLENTLL = 10023;
const SQLETIME = 10024;
const SQLEWRIT = 10025;
const SQLEMODE = 10026;
const SQLEOOB = 10027;
const SQLEITIM = 10028;
const SQLEDBPS = 10029;
const SQLEIOPT = 10030;
const SQLEASNL = 10031;
const SQLEASUL = 10032;
const SQLENPRM = 10033;
const SQLEDBOP = 10034;
const SQLENSIP = 10035;
const SQLECNULL = 10036;
const SQLESEOF = 10037;
const SQLERPND = 10038;
const SQLECSYN = 10039;
const SQLENONET = 10040;
const SQLEBTYP = 10041;
const SQLEABNC = 10042;
const SQLEABMT = 10043;
const SQLEABNP = 10044;
const SQLEBNCR = 10045;
const SQLEAAMT = 10046;
const SQLENXID = 10047;
const SQLEIFNB = 10048;
const SQLEKBCO = 10049;
const SQLEBBCI = 10050;
const SQLEKBCI = 10051;
const SQLEBCWE = 10052;
const SQLEBCNN = 10053;
const SQLEBCOR = 10054;
const SQLEBCPI = 10055;
const SQLEBCPN = 10056;
const SQLEBCPB = 10057;
const SQLEVDPT = 10058;
const SQLEBIVI = 10059;
const SQLEBCBC = 10060;
const SQLEBCFO = 10061;
const SQLEBCVH = 10062;
const SQLEBCUO = 10063;
const SQLEBUOE = 10064;
const SQLEBWEF = 10065;
const SQLEBTMT = 10066;
const SQLEBEOF = 10067;
const SQLEBCSI = 10068;
const SQLEPNUL = 10069;
const SQLEBSKERR = 10070;
const SQLEBDIO = 10071;
const SQLEBCNT = 10072;
const SQLEMDBP = 10073;
const SQLINIT = 10074;
const SQLCRSINV = 10075;
const SQLCRSCMD = 10076;
const SQLCRSNOIND = 10077;
const SQLCRSDIS = 10078;
const SQLCRSAGR = 10079;
const SQLCRSORD = 10080;
const SQLCRSMEM = 10081;
const SQLCRSBSKEY = 10082;
const SQLCRSNORES = 10083;
const SQLCRSVIEW = 10084;
const SQLCRSBUFR = 10085;
const SQLCRSFROWN = 10086;
const SQLCRSBROL = 10087;
const SQLCRSFRAND = 10088;
const SQLCRSFLAST = 10089;
const SQLCRSRO = 10090;
const SQLCRSTAB = 10091;
const SQLCRSUPDTAB = 10092;
const SQLCRSUPDNB = 10093;
const SQLCRSVIIND = 10094;
const SQLCRSNOUPD = 10095;
const SQLCRSOS2 = 10096;
const SQLEBCSA = 10097;
const SQLEBCRO = 10098;
const SQLEBCNE = 10099;
const SQLEBCSK = 10100;
const SQLEUVBF = 10101;
const SQLEBIHC = 10102;
const SQLEBWFF = 10103;
const SQLNUMVAL = 10104;
const SQLEOLDVR = 10105;
const SQLEBCPS = 10106;
const SQLEDTC = 10107;
const SQLENOTIMPL = 10108;
const SQLENONFLOAT = 10109;
const SQLECONNFB = 10110;

// The severity levels are defined here
const EXINFO = 1;						// Informational, non-error
const EXUSER = 2;						// User error
const EXNONFATAL = 3;				// Non-fatal error
const EXCONVERSION = 4;			// Error in DB-LIBRARY data conversion
const EXSERVER = 5;					// The Server has returned an error flag
const EXTIME = 6;						// waiting for a response from the Server - the DBPROCESS is still alive
const EXPROGRAM = 7;   			// Coding error in user program
const EXRESOURCE = 8;  			// Running out of resources - the DBPROCESS may be dead
const EXCOMM = 9;						// Failure in communication with Server - the DBPROCESS is dead
const EXFATAL = 10; 				// Fatal error - the DBPROCESS is dead
const EXCONSISTENCY = 11;		// Internal software error  - notify MS Technical Supprt
// Offset identifiers
const OFF_SELECT = 0x16d;
const OFF_FROM = 0x14f;
const OFF_ORDER = 0x165;
const OFF_COMPUTE = 0x139;
const OFF_TABLE = 0x173;
const OFF_PROCEDURE = 0x16a;
const OFF_STATEMENT = 0x1cb;
const OFF_PARAM = 0x1c4;
const OFF_EXEC = 0x12c;
// Print lengths for certain fixed length data types
const PRINT4 = 11;
const PRINT2 = 6;
const PRINT1 = 3;
const PRFLT8 = 20;
const PRMONEY = 26;
const PRBIT = 3;
const PRDATETIME = 27;

const SUCCEED = 1;
const FAIL = 0;
const SUCCEED_ABORT = 2;

const DBUNKNOWN = 2;
const MORE_ROWS = -1;
const NO_MORE_ROWS = -2;
alias MORE_ROWS REG_ROW;
const BUF_FULL = -3;
// Status code for dbresults(). Possible return values are
// SUCCEED, FAIL, and NO_MORE_RESULTS.
const NO_MORE_RESULTS = 2;
const NO_MORE_RPC_RESULTS = 3;
const DBSETHOST = 1;
const DBSETUSER = 2;
const DBSETPWD = 3;
const DBSETAPP = 4;
const DBSETID = 5;
const DBSETLANG = 6;
const DBSETSECURE = 7;
const DBVER42 = 8;
const DBVER60 = 9;
const DBSETLOGINTIME = 10;

const DBSETFALLBACK = 12;
// Standard exit and error values
const STDEXIT = 0;
const ERREXIT = -1;

// dbrpcinit flags
const DBRPCRECOMPILE = 0x0001;
const DBRPCRESET = 0x0004;
const DBRPCCURSOR = 0x0008;

// dbrpcparam flags
const DBRPCRETURN = 0x1;
const DBRPCDEFAULT = 0x2;

// Cursor related constants

// Following flags are used in the concuropt parameter in the dbcursoropen function
const CUR_READONLY = 1;
const CUR_LOCKCC = 2;
const CUR_OPTCC = 3;
const CUR_OPTCCVAL = 4;
// Following flags are used in the scrollopt parameter in dbcursoropen
const CUR_FORWARD = 0;
const CUR_KEYSET = -1;
const CUR_DYNAMIC = 1;

const CUR_INSENSITIVE = -2;
// Following flags define the fetchtype in the dbcursorfetch function
const FETCH_FIRST = 1;
const FETCH_NEXT = 2;
const FETCH_PREV = 3;
const FETCH_RANDOM = 4;
const FETCH_RELATIVE = 5;

const FETCH_LAST = 6;
// Following flags define the per row status as filled by dbcursorfetch and/or dbcursorfetchex
const FTC_EMPTY = 0x00;
const FTC_SUCCEED = 0x01;
const FTC_MISSING = 0x02;
const FTC_ENDOFKEYSET = 0x04;

const FTC_ENDOFRESULTS = 0x08;
// Following flags define the operator types for the dbcursor function
const CRS_UPDATE = 1;
const CRS_DELETE = 2;
const CRS_INSERT = 3;
const CRS_REFRESH = 4;

const CRS_LOCKCC = 5;
// Following value can be passed to the dbcursorbind function for NOBIND type

const NOBIND = -2;
// Following are values used by DBCURSORINFO's Type parameter
const CU_CLIENT = 0x00000001;
const CU_SERVER = 0x00000002;
const CU_KEYSET = 0x00000004;
const CU_MIXED = 0x00000008;
const CU_DYNAMIC = 0x00000010;
const CU_FORWARD = 0x00000020;
const CU_INSENSITIVE = 0x00000040;
const CU_READONLY = 0x00000080;
const CU_LOCKCC = 0x00000100;
const CU_OPTCC = 0x00000200;
const CU_OPTCCVAL = 0x00000400;
// Following are values used by DBCURSORINFO's Status parameter
const CU_FILLING = 0x00000001;
const CU_FILLED = 0x00000002;

// Following are values used by dbupdatetext's type parameter
const UT_TEXTPTR = 0x0001;
const UT_TEXT = 0x0002;
const UT_MORETEXT = 0x0004;
const UT_DELETEONLY = 0x0008;

const UT_LOG = 0x0010;

// The following values are passed to dbserverenum for searching criteria.
const NET_SEARCH = 0x0001;
const LOC_SEARCH = 0x0002;
// These constants are the possible return values from dbserverenum.
const ENUM_SUCCESS = 0x0000;
const MORE_DATA = 0x0001;
const NET_NOT_AVAIL = 0x0002;
const OUT_OF_MEMORY = 0x0004;
const NOT_SUPPORTED = 0x0008;

const ENUM_INVALID_PARAM = 0x0010;

// Netlib Error problem codes.  ConnectionError() should return one of
// these as the dblib-mapped problem code, so the corresponding string
// is sent to the dblib app's error handler as dberrstr.  Return NE_E_NOMAP
// for a generic DB-Library error string (as in prior versions of dblib).

const NE_E_NOMAP = 0;
const NE_E_NOMEMORY = 1;
const NE_E_NOACCESS = 2;
const NE_E_CONNBUSY = 3;
const NE_E_CONNBROKEN = 4;
const NE_E_TOOMANYCONN = 5;
const NE_E_SERVERNOTFOUND = 6;
const NE_E_NETNOTSTARTED = 7;
const NE_E_NORESOURCE = 8;
const NE_E_NETBUSY = 9;
const NE_E_NONETACCESS = 10;
const NE_E_GENERAL = 11;
const NE_E_CONNMODE = 12;
const NE_E_NAMENOTFOUND = 13;
const NE_E_INVALIDCONN = 14;
const NE_E_NETDATAERR = 15;
const NE_E_TOOMANYFILES = 16;
const NE_E_CANTCONNECT = 17;

const NE_MAX_NETERROR = 17;

//define a function pointer
alias INT  DBERRHANDLE_PROC(PDBPROCESS , INT , INT , INT , LPCSTR , LPCSTR );
alias INT  DBMSGHANDLE_PROC(PDBPROCESS , DBINT , INT , INT , LPCSTR , LPCSTR , LPCSTR , DBUSMALLINT );

DBERRHANDLE_PROC  dberrhandle(DBERRHANDLE_PROC );
DBMSGHANDLE_PROC  dbmsghandle(DBMSGHANDLE_PROC );

DBERRHANDLE_PROC  dbprocerrhandle(PDBHANDLE , DBERRHANDLE_PROC );
DBMSGHANDLE_PROC  dbprocmsghandle(PDBHANDLE , DBMSGHANDLE_PROC );

/*****************************************************************************
* Function Prototypes                                                        *
*****************************************************************************/

// Two-phase commit functions
int  abort_xact(PDBPROCESS , DBINT );
void  build_xact_string(LPCSTR , LPCSTR , DBINT , LPSTR );
void  close_commit(PDBPROCESS );
int  commit_xact(PDBPROCESS , DBINT );
PDBPROCESS  open_commit(PLOGINREC , LPCSTR );
int  remove_xact(PDBPROCESS , DBINT , INT );
int  scan_xact(PDBPROCESS , DBINT );
DBINT  start_xact(PDBPROCESS , LPCSTR , LPCSTR , INT );
int  stat_xact(PDBPROCESS , DBINT );

// BCP functions
DBINT  bcp_batch(PDBPROCESS );
int  bcp_bind(PDBPROCESS , LPCBYTE , INT , DBINT , LPCBYTE , INT , INT , INT );
int  bcp_colfmt(PDBPROCESS , INT , BYTE , INT , DBINT , LPCBYTE , INT , INT );
int  bcp_collen(PDBPROCESS , DBINT , INT );
int  bcp_colptr(PDBPROCESS , LPCBYTE , INT );
int  bcp_columns(PDBPROCESS , INT );
int  bcp_control(PDBPROCESS , INT , DBINT );
DBINT  bcp_done(PDBPROCESS );
int  bcp_exec(PDBPROCESS , LPDBINT );
int  bcp_init(PDBPROCESS , LPCSTR , LPCSTR , LPCSTR , INT );
int  bcp_moretext(PDBPROCESS , DBINT , LPCBYTE );
int  bcp_readfmt(PDBPROCESS , LPCSTR );
int  bcp_sendrow(PDBPROCESS );
int  bcp_setl(PLOGINREC , BOOL );
int  bcp_writefmt(PDBPROCESS , LPCSTR );

// Standard DB-Library functions
LPCBYTE  dbadata(PDBPROCESS , INT , INT );
DBINT  dbadlen(PDBPROCESS , INT , INT );
int  dbaltbind(PDBPROCESS , INT , INT , INT , DBINT , LPCBYTE );
int  dbaltcolid(PDBPROCESS , INT , INT );
DBINT  dbaltlen(PDBPROCESS , INT , INT );
int  dbaltop(PDBPROCESS , INT , INT );
int  dbalttype(PDBPROCESS , INT , INT );
DBINT  dbaltutype(PDBPROCESS , INT , INT );

int  dbanullbind(PDBPROCESS , INT , INT , LPCDBINT );
//int  dbbind(PDBPROCESS dbproc, INT , INT , DBINT , LPBYTE );
int dbbind (PDBPROCESS dbproc, int column, int vartype, DBINT varlen, LPBYTE varaddr );
LPCBYTE  dbbylist(PDBPROCESS , INT , LPINT );
int  dbcancel(PDBPROCESS );
int  dbcanquery(PDBPROCESS );
LPCSTR  dbchange(PDBPROCESS );
int  dbclose(PDBPROCESS );
void  dbclrbuf(PDBPROCESS , DBINT );
int  dbclropt(PDBPROCESS , INT , LPCSTR );
int  dbcmd(PDBPROCESS , LPCSTR );
int  dbcmdrow(PDBPROCESS );
bool  dbcolbrowse(PDBPROCESS , INT );
int  dbcolinfo(PDBHANDLE , INT , INT , INT , LPDBCOL );
DBINT  dbcollen(PDBPROCESS , INT );
LPCSTR  dbcolname(PDBPROCESS , INT );
LPCSTR  dbcolsource(PDBPROCESS , INT );
int  dbcoltype(PDBPROCESS , INT );
DBINT  dbcolutype(PDBPROCESS , INT );
int  dbconvert(PDBPROCESS , INT , LPCBYTE , DBINT , INT , LPBYTE , DBINT );
DBINT  dbcount(PDBPROCESS );
int  dbcurcmd(PDBPROCESS );
DBINT  dbcurrow(PDBPROCESS );
int  dbcursor(PDBCURSOR , INT , INT , LPCSTR , LPCSTR );
int  dbcursorbind(PDBCURSOR , INT , INT , DBINT , LPDBINT , LPBYTE );
int  dbcursorclose(PDBHANDLE );
int  dbcursorcolinfo(PDBCURSOR , INT , LPSTR , LPINT , LPDBINT , LPINT );
int  dbcursorfetch(PDBCURSOR , INT , INT );
int  dbcursorfetchex(PDBCURSOR , INT , DBINT , DBINT , DBINT );
int  dbcursorinfo(PDBCURSOR , LPINT , LPDBINT );
int  dbcursorinfoex(PDBCURSOR , LPDBCURSORINFO );
PDBCURSOR  dbcursoropen(PDBPROCESS , LPCSTR , INT , INT , UINT , LPDBINT );
LPCBYTE  dbdata(PDBPROCESS , INT );
bool  dbdataready(PDBPROCESS );
int  dbdatecrack(PDBPROCESS , LPDBDATEREC , LPCDBDATETIME );
DBINT  dbdatlen(PDBPROCESS , INT );
bool  dbdead(PDBPROCESS );
void  dbexit();
int  dbenlisttrans(PDBPROCESS , LPVOID );
int  dbenlistxatrans(PDBPROCESS , BOOL );
//C     extern RETCODE	      dbfcmd (PDBPROCESS, LPCSTR, ...);
INT  dbfcmd(PDBPROCESS , LPCSTR ,...);
DBINT  dbfirstrow(PDBPROCESS );
void  dbfreebuf(PDBPROCESS );
void  dbfreelogin(PLOGINREC );
void  dbfreequal(LPCSTR );
LPSTR  dbgetchar(PDBPROCESS , INT );
short  dbgetmaxprocs();
int  dbgetoff(PDBPROCESS , DBUSMALLINT , INT );
uint  dbgetpacket(PDBPROCESS );
int  dbgetrow(PDBPROCESS , DBINT );
int  dbgettime();
LPVOID  dbgetuserdata(PDBPROCESS );
bool  dbhasretstat(PDBPROCESS );
LPCSTR  dbinit();
bool  dbisavail(PDBPROCESS );
bool  dbiscount(PDBPROCESS );
bool  dbisopt(PDBPROCESS , INT , LPCSTR );
DBINT  dblastrow(PDBPROCESS );
PLOGINREC  dblogin();
int  dbmorecmds(PDBPROCESS );
int  dbmoretext(PDBPROCESS , DBINT , LPCBYTE );
LPCSTR  dbname(PDBPROCESS );
int  dbnextrow(PDBPROCESS );
int  dbnullbind(PDBPROCESS , INT , LPCDBINT );
int  dbnumalts(PDBPROCESS , INT );
int  dbnumcols(PDBPROCESS );
int  dbnumcompute(PDBPROCESS );
int  dbnumorders(PDBPROCESS );
int  dbnumrets(PDBPROCESS );
PDBPROCESS  dbopen(PLOGINREC , LPCSTR );
int  dbordercol(PDBPROCESS , INT );
int  dbprocinfo(PDBPROCESS , LPDBPROCINFO );
void  dbprhead(PDBPROCESS );
int  dbprrow(PDBPROCESS );
LPCSTR  dbprtype(INT );
LPCSTR  dbqual(PDBPROCESS , INT , LPCSTR );
DBINT  dbreadpage(PDBPROCESS , LPCSTR , DBINT , LPBYTE );
DBINT  dbreadtext(PDBPROCESS , LPVOID , DBINT );
int  dbresults(PDBPROCESS );
LPCBYTE  dbretdata(PDBPROCESS , INT );
DBINT  dbretlen(PDBPROCESS , INT );
LPCSTR  dbretname(PDBPROCESS , INT );
DBINT  dbretstatus(PDBPROCESS );
int  dbrettype(PDBPROCESS , INT );
int  dbrows(PDBPROCESS );
int  dbrowtype(PDBPROCESS );
int  dbrpcinit(PDBPROCESS , LPCSTR , DBSMALLINT );
int  dbrpcparam(PDBPROCESS , LPCSTR , BYTE , INT , DBINT , DBINT , LPCBYTE );
int  dbrpcsend(PDBPROCESS );
int  dbrpcexec(PDBPROCESS );
void  dbrpwclr(PLOGINREC );
int  dbrpwset(PLOGINREC , LPCSTR , LPCSTR , INT );
int  dbserverenum(USHORT , LPSTR , USHORT , LPUSHORT );
void  dbsetavail(PDBPROCESS );
int  dbsetmaxprocs(SHORT );
int  dbsetlname(PLOGINREC , LPCSTR , INT );
int  dbsetlogintime(INT );
int  dbsetlpacket(PLOGINREC , USHORT );
int  dbsetnull(PDBPROCESS , INT , INT , LPCBYTE );
int  dbsetopt(PDBPROCESS , INT , LPCSTR );
int  dbsettime(INT );
void  dbsetuserdata(PDBPROCESS , LPVOID );
int  dbsqlexec(PDBPROCESS );
int  dbsqlok(PDBPROCESS );
int  dbsqlsend(PDBPROCESS );
int  dbstrcpy(PDBPROCESS , INT , INT , LPSTR );
int  dbstrlen(PDBPROCESS );
bool  dbtabbrowse(PDBPROCESS , INT );
int  dbtabcount(PDBPROCESS );
LPCSTR  dbtabname(PDBPROCESS , INT );
LPCSTR  dbtabsource(PDBPROCESS , INT , LPINT );
int  dbtsnewlen(PDBPROCESS );
LPCDBBINARY  dbtsnewval(PDBPROCESS );
int  dbtsput(PDBPROCESS , LPCDBBINARY , INT , INT , LPCSTR );
LPCDBBINARY  dbtxptr(PDBPROCESS , INT );
LPCDBBINARY  dbtxtimestamp(PDBPROCESS , INT );
LPCDBBINARY  dbtxtsnewval(PDBPROCESS );
int  dbtxtsput(PDBPROCESS , LPCDBBINARY , INT );
int  dbuse(PDBPROCESS , LPCSTR );
bool  dbvarylen(PDBPROCESS , INT );
bool  dbwillconvert(INT , INT );
int  dbwritepage(PDBPROCESS , LPCSTR , DBINT , DBINT , LPBYTE );
int  dbwritetext(PDBPROCESS , LPCSTR , LPCDBBINARY , DBTINYINT , LPCDBBINARY , BOOL , DBINT , LPCBYTE );
int  dbupdatetext(PDBPROCESS , LPCSTR , LPCDBBINARY , LPCDBBINARY , INT , DBINT , DBINT , LPCSTR , DBINT , LPCDBBINARY );



调用例子:
module test;

import sqldb;
import std.c.stdio;
import std.string;

int main(){

    PDBPROCESS  dbproc;    // The connection with SQL Server. 
    PLOGINREC   login;     // The login information. 
    DBCHAR      name[100];
    DBCHAR      city[100];

    // Initialize DB-Library.
    dbinit();

    // Get a LOGINREC.
    login = dblogin ();
    dbsetlname (login, "sa",DBSETUSER);
    dbsetlname (login, "",DBSETPWD);
    dbsetlname (login, "example",DBSETAPP);		

    // Get a DBPROCESS structure for communication with SQL Server. 
    dbproc = dbopen (login, "BM");

    // Retrieve some columns from the authors table in the pubs database.
    
    // First, put the command into the command buffer. 
    dbcmd (dbproc, "SELECT cpm,ccd FROM pt..tzl_sp");
    dbcmd (dbproc, " WHERE CID < 130 ");
		
    // Send the command to SQL Server and start execution. 
    dbsqlexec (dbproc);
		
    // Process the results. 
    if (dbresults (dbproc) == SUCCEED)
    {
        // Bind column to program variables.             
        dbbind (dbproc, 1, NTBSTRINGBIND, 0, name);
        dbbind (dbproc, 2, NTBSTRINGBIND, 0, city);
		
        // Retrieve and print the result rows. 
        while (dbnextrow(dbproc) !=  NO_MORE_ROWS)
        {
        	  printf ("%s from %s\n", toStringz(name), toStringz(city));
        }
    }
    // Close the connection to SQL Server. 
    dbexit ();		
    return 0;
}


4.参考http://qiezi.iteye.com/blog/26632
分享到:
评论
2 楼 ideage 2006-10-10  
to qiezi 不好意思,我是看你搬了家,才来的!

以后还请多多帮助!
1 楼 qiezi 2006-10-10  
你的家居然在这里。。。幸会~

不过怎么在http://www.iteye.com/user/36102可以看到这篇文章,左边显示的是ideage,但点进来用户名显示的却是 czhcc,论坛的BUG?

相关推荐

    Web应用程序设计案例教程

    第1章 初识Web应用程序 第2章 数据库应用基础 ...第4章 用户登录模块设计 第5章 网站访问计数器设计 第6章 图书信息查询模块设计 第7章 图书信息浏览模块设计 ...附录D Web应用程序设计综合实训

    应用程序的M F C类、支持窗口

    在第3章中,我们将讨论一个M F C应用程序是怎样通过消息与外界及应用程序进行通信的。 还将讨论四种消息类型,并跟踪一个消息通过接收消息的类。最后将探讨该路径上的重定向 消息。 绘图 在第4章中,我们将讨论在...

    D程序设计语言.(美)Andrei.Alexandrescu著

    D语言是一种通用的系统和应用编程语言,它保持了生成高效代码以及直接访问操作系统API和硬件的能力。《D程序设计语言》是一本介绍D语言的权威书籍,全面、系统、专业地讲解了D语言相关的内容。书中涵盖了D语言的...

    D语言程序设计 中文文档

    D 是一种通用的系统和应用编程语言。它是比C++更高级的语言,同时还保持了生成高效代码以及直接访问操作系统API和硬件的能力。D 很适合于编写从中等规模到那些由团队合作完成、数百万行代码规模的各种程序。D 易于...

    让Asp.net应用程序使用UNC路径访问网络文件夹

    Vs2010测试时可以正常访问网络文件夹,\\192.168.2.249\d$\IndexRoot 但配置到IIS上就无法访问了,原因是asp.net development server具有最高的权限,可以通过本机存储的unc用户名密码去进行身份验证。于是,解决这...

    多应用授权系统,多域名授权源码,多网站授权源码

    4.D版检测: 未授权的访问将写入D版程序ID和其域名,可以手动删除,新建授权时存在D版会删除D版信息; 5.一键获取授权代码: 不同应用的授权代码不同,在程序列表和授权列表可以一键获取授权代码,傻瓜式接入; 6....

    实用的电子邮件发送程序

    实用的邮件发送程序,可轻松集成至C/S架构及B/S架构的应用软件中,实现系统自动地向客户提供邮件发送服务。 其调用说明如下: 1、设置邮件服务器:void SetMailServer(char *iSrvHost,int iPort,char *iUserNo, char...

    D-Bus 可配置传感器扫描应用_C++_代码_相关文件_下载

    dbus-sensors 是一组传感器应用程序,提供 xyz.openbmc_project.Sensor 接口集合。它们从 hwmon、d-bus 或直接驱动程序访问中读取传感器值以提供读数。还支持一些高级非传感器功能,例如风扇存在、pwm 控制和自动 ...

    印度Ola公司开源的应用程序漏洞检测工具Jackhammer.zip

    它可以扫描具有和不具有身份验证的所有Web应用程序/移动应用程序/网络/内容管理系统,并具有管理会话的独特方式,以更好地识别漏洞。 特点 提供统一的界面来协调调查结果 可以对所有代码管理库和URL进行扫描...

    2操作系统应用.doc

    单选题: 1、Windows中,要设置将任务栏上的...均可通过剪切、复制和粘贴与其他Windows应用程序交换信息 D.两者均不能与其他Windows应用程序交换信息 答案:C 5、Windows中有很多功能强大的应用程序,其中"磁盘碎片整

    为所有人构建Web应用程序(Adam D. Scott)Building Web Apps for Everyone (Adam D. Scott)

    本书提供了几种在应用程序中使用渐进增强功能,可访问性设计和兼容Web表单的选项和最佳实践。 这些功能将帮助您的在线产品实现蒂姆·伯纳斯·李(Tim Berners-Lee)关于建立全球通信网络的承诺,该网络使每个有联系...

    java程序设计阅读程序写结果题22道

    ①它可以利用已有的类来创建自己的类,只需要指出自己的类和已有的其他类有什么不同即可,而且还可以动态访问其他有 关类中的信息。 ②通过继承,可以利用Java类库所提供的丰富而有用的类,这些类都已经被很好地实现...

    曝光通知客户端应用程序/应用程序客户端 de notice d'exposition

    概览 本地开发 自定义 本地化 概览 此应用程序使用 React Native 构建,旨在与 Android 和 iOS 设备上的模式良好配合。 它与 COVID 警报诊断服务器一起工作,为暴露通知的客户端应用程序如何工作提供参考。 本地开发...

    单片机接口技术实用子程序电子书及其配套源代码

    8.5 子程序52——I2C接口的A/D及D/A转换器的应用 417 8.5.1 PCF859l简要介绍 418 8.5.2 PCF8591与单片机接口电路的设计 420 8.5.3 控制程序的设计 420 8.6 子程序53——基于AD9850的数字信号发生器 426 8.6.1 AD9850...

    单片机C语言程序设计实训100例--基于AVR+PROTEUS仿真(源程序暂缺)

    1.4 程序与数据内存访问 1.5 I/O端口编程 1.6 外设相关寄存器及应用 1.7 中断服务程序 1.8 GCC在AVR单片机应用系统开发中的优势 第二章:PROTEUS操作基础 2.1 PROTEUS操作界面简介 2.2 仿真电路原理图设计 ...

    VISUAL C++MFC编程实例

    本书通过85个实例全面讲述了应用MFC进行Visual C++编程的思想。每个实例均以编写一个应用程序要走的步骤编写。...附录C 访问其他应用程序类 328 附录D 开发中注意事项 330 附录E MFC快速参考指南 339

    单片机C语言程序设计实训100例--基于AVR+PROTEUS仿真(源程序)

    1.4 程序与数据内存访问 1.5 I/O端口编程 1.6 外设相关寄存器及应用 1.7 中断服务程序 1.8 GCC在AVR单片机应用系统开发中的优势 第二章:PROTEUS操作基础 2.1 PROTEUS操作界面简介 2.2 仿真电路原理图设计 ...

    交大网络教育-计算机应用基础-第二次作业-windows操作系统.doc

    在应用程序窗口标题栏的右端一般有三个按钮,分别是"最小化"、"最大化"(或"还原" )、"关闭" d. 应用程序在窗口标题栏的左边都有一个图标 反馈 正确答案是:在应用程序窗口标题栏的右端一般有三个按钮,分别是...

    win2003 补丁 iis 应用程序池 无法启动 进程退出代码是 0xffffffff

    windows 2003 补丁 KB982666 可能会导致 iis 应用程序池 无法启动 进程退出代码是 0xffffffff 卸载KB982666 既可解决问题 网上传统解法二: IIS 500错误报“进程退出代码是 ‘0xffffffff’”的处理方案 (此故障只...

    IIS6.0 IIS,互联网信息服务

    如果你已在DNS服务器中将所有你需要的域名都已经映射到了此惟一的IP地址,则用设不同“主机头名”的方法,可以让你直接用域名来完成对不同Web站点的访问。 比如你本机只有一个IP地址为192.168.0.1,你已经建立(或...

Global site tag (gtag.js) - Google Analytics