- 浏览: 326169 次
最新评论
-
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 879最近抽空翻译了D语言实用入门教程 地址在Github,供初 ... -
编译WxD0.16
2011-09-27 18:09 1717wx我在Python环境下用了 ... -
简单看了下DGui
2011-09-26 10:39 2249很久没有写代码了。。。。 怀念往日不如今天行动。生疏了 ... -
支持中文录入的harmonia
2010-08-16 22:40 1040harmonia界面很方便,发现不能录入中文.Patch一下. ... -
控制台得到密码不回显
2009-09-18 22:37 1266看到坛子有人问“在D或C下如何实现输入单个字符不回显?可能的应 ... -
D资源文件调用
2009-08-09 01:36 1052终于成功了。 资源文件太可爱,竟然可以如此。按名称进行 ... -
The Case for D中英文版PDF下载
2009-06-19 10:27 1403The Case for D 在网站上浏览不方便的,有了PD ... -
D语言真相 The Case for D(1-5)
2009-06-17 09:52 4895D语言真相 Andrei Alexandre ... -
The Case for D
2009-06-16 22:50 2307The Case for D Andrei Alexan ... -
Python嵌入D
2009-06-12 11:37 1962所有的嵌入都研究了一个遍。发现嵌入Python挺好,试试。 ... -
实用的DFL注册表
2009-05-27 09:09 1016应用中要用到注册表.DFL里面有. 参照了文档,写了一 ... -
DFL 2.027,1.041,2,3编译
2009-04-07 17:59 1596注:DFL已经更新,http://www.dprogrammi ... -
D2.0的字符串
2009-04-07 08:28 1379D2.0的字符串增加了常量,不变量和变量.在很大程度上增加了语 ... -
D语言编译器DMD开源了!
2009-03-05 19:56 3478自从1999年12月,Walter设计开发D语言以来,D语 ... -
D语言现状From2007
2009-03-02 15:32 1068I'm sure this was brought up in ... -
D语言GUI库简单比较
2009-02-20 15:25 3229通过对一些D语言可以使用的GUI进行比较,对初学者有个借 ... -
D语言脚本引擎简单比较
2009-02-19 14:38 1819经过长期的测试,使用,扩展代码编写,比较了D中可以使用的几种脚 ... -
D语言编译器开始支持Mac OSX
2009-02-15 18:25 1153D语言编译器开始支持Mac OSX。 D语言历经10年的发 ... -
触发DFL中的ComboBox控件的键盘事件
2009-02-06 12:04 1192class ComboxKeyDownFilter:IMess ... -
DFL分析(四)伟大的结构
2008-12-25 00:08 1425每个程序都有很多的代码编织而成.为了获得最大的兼容性,你要从容 ...
相关推荐
在 WinCC 中,我们可以使用按钮来打开文件夹、应用程序等,以便更方便地访问和操作这些资源。下面我们将详细介绍如何在 WinCC 中使用按钮打开文件夹及其他应用程序。 按钮的定义和命名 首先,在图形编辑器中定义一...
### Asp.net应用程序使用UNC路径访问网络文件夹 #### 背景介绍 在开发Asp.net应用程序的过程中,经常会遇到需要访问网络文件夹的情况。在本地开发环境下使用Visual Studio 2010(以下简称Vs2010)进行测试时,能够...
第1章 初识Web应用程序 第2章 数据库应用基础 ...第4章 用户登录模块设计 第5章 网站访问计数器设计 第6章 图书信息查询模块设计 第7章 图书信息浏览模块设计 ...附录D Web应用程序设计综合实训
在Android中,用户可以通过`Settings`应用访问"管理应用程序"。相关设置的标题和描述可能包含以下字符串资源: - `manageapplications_settings_title`:这可能是管理应用程序设置的标题,比如"应用管理"。 - `...
4. **设置服务权限**:如果应用程序需要特定的权限,比如访问网络或者特定的系统资源,你可能需要调整服务账户的权限。默认情况下,服务通常以Local System账户运行,但也可以更改为其他账户。 5. **启动和管理服务...
ASP.NET 2.0 中 WEB 应用程序的部署是指在我们建立完一个 WEB 应用程序后,将其部署到生产环境中,使其可以被用户访问的过程。部署 WEB 应用程序是非常重要的步骤,因为它直接影响着用户体验和应用程序的可靠性。 ...
- 介绍如何使用应用程序设计器来实现与其他系统的集成,比如ERP或CRM系统。 - **主题2:高级用户界面定制** - 探讨如何利用CSS、JavaScript等前端技术进一步定制Maximo的用户界面,以提供更加友好的用户体验。 - *...
“获取上网帐号密码并自动保存到D盘.EXE”是压缩包内的文件名,表明这是可执行文件(EXE),是Windows操作系统下的应用程序。这个文件很可能就是描述中所说的工具,用户下载并运行后,就能使用其功能。自动保存功能...
在“C语言基础 简单C语言应用程序”这个主题中,我们将深入探讨C语言的基础知识,了解如何编写简单的C语言应用程序。 首先,C语言的基础包括数据类型。C语言支持基本的数据类型如整型(int)、浮点型(float、...
在第3章中,我们将讨论一个M F C应用程序是怎样通过消息与外界及应用程序进行通信的。 还将讨论四种消息类型,并跟踪一个消息通过接收消息的类。最后将探讨该路径上的重定向 消息。 绘图 在第4章中,我们将讨论在...
单片机原理与应用是电子工程领域中一个重要的学习板块,C51程序设计则是针对8051系列单片机进行编程的一种语言。在这个专题中,我们将深入探讨这两个核心概念,以及如何通过课后习题来提升理解和实践能力。 首先,...
《C51单片机应用与C语言程序设计》是一本深入浅出的教程,旨在帮助读者掌握C51单片机的使用以及基于C语言的编程技术。配套程序是学习过程中不可或缺的一部分,它们提供了实践操作的机会,使理论知识得以实际验证。...
在使用Visual C++ (VC++) 开发Windows应用程序时,有时我们可能需要对程序的磁盘访问权限进行控制,比如禁止程序访问特定的磁盘驱动器,例如D盘。这种需求通常出于安全考虑,防止程序误操作或者恶意行为,或者是为了...
单片机高级C51应用程序设计是一门涵盖了嵌入式系统开发中的重要技术领域,主要针对Atmel公司的8位AVR单片机进行讲解。C51是专门为8051系列单片机定制的一种高级编程语言,它扩展了标准C语言,使其更适合于微控制器的...
6. **实际应用案例**:教案可能包含一些实际项目案例,如温控系统、防盗报警器、智能家居等,让学生了解单片机在现实生活中的广泛应用。 7. **优秀毕业设计与论文**:标签中的“优秀毕业设计”和“优秀毕业论文”...
### 单片机高级语言C51应用程序设计 #### 一、引言 随着电子技术的发展,单片机因其体积小、成本低、可靠性高、易于控制等优势,在工业自动化、家用电器、智能仪器仪表等领域得到了广泛应用。在单片机编程领域,...
西门子Sinumerik 802S/C/D PLC子程序库是专为这款系列的数控系统设计的应用工具,用于实现复杂控制逻辑和自动化任务。这个应用指南详细介绍了如何有效地利用PLC子程序来提高系统的功能性和效率。下面将深入探讨相关...
### Lazarus开发Android应用程序指南 #### 一、引言 随着移动互联网的快速发展,Android操作系统因其开放性和灵活性而成为智能手机和平板电脑市场的主导者之一。为了满足开发者的需求,多种编程工具和技术应运而生...
《单片机高级C51应用程序设计》是一本专注于单片机编程的书籍,主要针对C51语言在单片机应用中的高级技巧和实践。C51是为8051系列单片机设计的一种高级语言,它以其简洁、易读的语法特性,成为单片机开发中广泛使用...