- 浏览: 319720 次
最新评论
-
riki:
D 语言学习交流群 264617728, 欢迎加入
D语言真相 The Case for D(1-5) -
exploder:
请教,如果使用D2进行wxD编译呢?
编译WxD0.16 -
blue_halo:
那如何解决呢????????
不能每次都用别的打开存成utf- ...
pyDev 中输入中文问题 -
funxue:
请教楼主
Error: undefined identifie ...
D语言版本的华容道 -
litsen:
在配置ms sqlserver的过程中遇到些问题,从Googl ...
安全第一,在sql server和client之间配置ssl连接
要使用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?
不过怎么在http://www.iteye.com/user/36102可以看到这篇文章,左边显示的是ideage,但点进来用户名显示的却是 czhcc,论坛的BUG?
发表评论
-
最近抽空翻译了D语言实用入门教程
2018-04-20 10:42 830最近抽空翻译了D语言实用入门教程 地址在Github,供初 ... -
编译WxD0.16
2011-09-27 18:09 1662wx我在Python环境下用了 ... -
简单看了下DGui
2011-09-26 10:39 2190很久没有写代码了。。。。 怀念往日不如今天行动。生疏了 ... -
支持中文录入的harmonia
2010-08-16 22:40 1003harmonia界面很方便,发现不能录入中文.Patch一下. ... -
控制台得到密码不回显
2009-09-18 22:37 1221看到坛子有人问“在D或C下如何实现输入单个字符不回显?可能的应 ... -
D资源文件调用
2009-08-09 01:36 1019终于成功了。 资源文件太可爱,竟然可以如此。按名称进行 ... -
The Case for D中英文版PDF下载
2009-06-19 10:27 1361The Case for D 在网站上浏览不方便的,有了PD ... -
D语言真相 The Case for D(1-5)
2009-06-17 09:52 4775D语言真相 Andrei Alexandre ... -
The Case for D
2009-06-16 22:50 2278The Case for D Andrei Alexan ... -
Python嵌入D
2009-06-12 11:37 1878所有的嵌入都研究了一个遍。发现嵌入Python挺好,试试。 ... -
实用的DFL注册表
2009-05-27 09:09 954应用中要用到注册表.DFL里面有. 参照了文档,写了一 ... -
DFL 2.027,1.041,2,3编译
2009-04-07 17:59 1555注:DFL已经更新,http://www.dprogrammi ... -
D2.0的字符串
2009-04-07 08:28 1348D2.0的字符串增加了常量,不变量和变量.在很大程度上增加了语 ... -
D语言编译器DMD开源了!
2009-03-05 19:56 3416自从1999年12月,Walter设计开发D语言以来,D语 ... -
D语言现状From2007
2009-03-02 15:32 1009I'm sure this was brought up in ... -
D语言GUI库简单比较
2009-02-20 15:25 3178通过对一些D语言可以使用的GUI进行比较,对初学者有个借 ... -
D语言脚本引擎简单比较
2009-02-19 14:38 1780经过长期的测试,使用,扩展代码编写,比较了D中可以使用的几种脚 ... -
D语言编译器开始支持Mac OSX
2009-02-15 18:25 1093D语言编译器开始支持Mac OSX。 D语言历经10年的发 ... -
触发DFL中的ComboBox控件的键盘事件
2009-02-06 12:04 1152class ComboxKeyDownFilter:IMess ... -
DFL分析(四)伟大的结构
2008-12-25 00:08 1392每个程序都有很多的代码编织而成.为了获得最大的兼容性,你要从容 ...
相关推荐
第1章 初识Web应用程序 第2章 数据库应用基础 ...第4章 用户登录模块设计 第5章 网站访问计数器设计 第6章 图书信息查询模块设计 第7章 图书信息浏览模块设计 ...附录D Web应用程序设计综合实训
在第3章中,我们将讨论一个M F C应用程序是怎样通过消息与外界及应用程序进行通信的。 还将讨论四种消息类型,并跟踪一个消息通过接收消息的类。最后将探讨该路径上的重定向 消息。 绘图 在第4章中,我们将讨论在...
D语言是一种通用的系统和应用编程语言,它保持了生成高效代码以及直接访问操作系统API和硬件的能力。《D程序设计语言》是一本介绍D语言的权威书籍,全面、系统、专业地讲解了D语言相关的内容。书中涵盖了D语言的...
D 是一种通用的系统和应用编程语言。它是比C++更高级的语言,同时还保持了生成高效代码以及直接访问操作系统API和硬件的能力。D 很适合于编写从中等规模到那些由团队合作完成、数百万行代码规模的各种程序。D 易于...
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...
dbus-sensors 是一组传感器应用程序,提供 xyz.openbmc_project.Sensor 接口集合。它们从 hwmon、d-bus 或直接驱动程序访问中读取传感器值以提供读数。还支持一些高级非传感器功能,例如风扇存在、pwm 控制和自动 ...
它可以扫描具有和不具有身份验证的所有Web应用程序/移动应用程序/网络/内容管理系统,并具有管理会话的独特方式,以更好地识别漏洞。 特点 提供统一的界面来协调调查结果 可以对所有代码管理库和URL进行扫描...
单选题: 1、Windows中,要设置将任务栏上的...均可通过剪切、复制和粘贴与其他Windows应用程序交换信息 D.两者均不能与其他Windows应用程序交换信息 答案:C 5、Windows中有很多功能强大的应用程序,其中"磁盘碎片整
本书提供了几种在应用程序中使用渐进增强功能,可访问性设计和兼容Web表单的选项和最佳实践。 这些功能将帮助您的在线产品实现蒂姆·伯纳斯·李(Tim Berners-Lee)关于建立全球通信网络的承诺,该网络使每个有联系...
①它可以利用已有的类来创建自己的类,只需要指出自己的类和已有的其他类有什么不同即可,而且还可以动态访问其他有 关类中的信息。 ②通过继承,可以利用Java类库所提供的丰富而有用的类,这些类都已经被很好地实现...
概览 本地开发 自定义 本地化 概览 此应用程序使用 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...
1.4 程序与数据内存访问 1.5 I/O端口编程 1.6 外设相关寄存器及应用 1.7 中断服务程序 1.8 GCC在AVR单片机应用系统开发中的优势 第二章:PROTEUS操作基础 2.1 PROTEUS操作界面简介 2.2 仿真电路原理图设计 ...
本书通过85个实例全面讲述了应用MFC进行Visual C++编程的思想。每个实例均以编写一个应用程序要走的步骤编写。...附录C 访问其他应用程序类 328 附录D 开发中注意事项 330 附录E MFC快速参考指南 339
1.4 程序与数据内存访问 1.5 I/O端口编程 1.6 外设相关寄存器及应用 1.7 中断服务程序 1.8 GCC在AVR单片机应用系统开发中的优势 第二章:PROTEUS操作基础 2.1 PROTEUS操作界面简介 2.2 仿真电路原理图设计 ...
在应用程序窗口标题栏的右端一般有三个按钮,分别是"最小化"、"最大化"(或"还原" )、"关闭" d. 应用程序在窗口标题栏的左边都有一个图标 反馈 正确答案是:在应用程序窗口标题栏的右端一般有三个按钮,分别是...
windows 2003 补丁 KB982666 可能会导致 iis 应用程序池 无法启动 进程退出代码是 0xffffffff 卸载KB982666 既可解决问题 网上传统解法二: IIS 500错误报“进程退出代码是 ‘0xffffffff’”的处理方案 (此故障只...
如果你已在DNS服务器中将所有你需要的域名都已经映射到了此惟一的IP地址,则用设不同“主机头名”的方法,可以让你直接用域名来完成对不同Web站点的访问。 比如你本机只有一个IP地址为192.168.0.1,你已经建立(或...