Pro*c/c++ 在VC6.0中的编译方法

【Pro*c编译过程】

1。进入VC6.0 的界面,选择TOOLS-CUSTOMIZE后出现框后,选择tools选项,将选择最下面的空格处,输入:

 

2。存盘后,在主菜单下就有了PROC

3。在PROJECT-SETTING后,选择LINK后,输入orasql10.lib

4。设置完毕。

【Pro*c++编译过程】

1、添加oratools.h

#ifndef __LZP_ORACLE_TOOLS_HEAD__
#define __LZP_ORACLE_TOOLS_HEAD__
struct VARCHAR
{
 unsigned short len;
 char arr[30];
};

class CLzpOracle
{
private:
 typedef void(*callbackfunc)(CString str,LPVOID lparam);  //定义回调函数类型
   
    LPVOID dlg;
 callbackfunc myFunc; //回调函数对象
public:
 CLzpOracle();
 ~CLzpOracle();
 void InitData(callbackfunc  pFunc,LPVOID lparam); //赋值回调函数
 
 void IndigenLink(char * szNmae_password,char* listName,char* listPath,char* userName);//本地连接
 void LongDistanceLink(char * szNmae_password,char* listName,char* listPath,char* userName);//远程连接
 void sql_error(char *msg) ; //数据库连接时的错误
};


#endif

2、设置oratools.pc编译方式

3、oratools.cpp最上面添加函数定义

#include "stdafx.h"
#include "oratools.h"

#ifdef  __cplusplus
extern "C" {
#endif
 

 /* SQLLIB Prototypes */
 extern void sqlcxt (void **, unsigned int *,
  struct sqlexd *, const struct sqlcxp *);
 extern void sqlcx2t(void **, unsigned int *,
  struct sqlexd *, const struct sqlcxp *);
 extern void sqlbuft(void **, char *);
 extern void sqlgs2t(void **, char *);
extern void sqlorat(void **, unsigned int *, void *);

#ifdef  __cplusplus
}
 #endif

 

 

出自:http://blog.csdn.net/berniebd/article/details/1601686

我想很多人在VC下连接Oracle数据库时,一般使用ODBC或ADO控件,而使用Proc*C/C++应该会比较少。并且我在网上搜索了一下,关于这方面的介绍也不多。本人也是因工作需要而使用它,在对此一无所知的情况下,十分感谢“时代朝阳数据库技术中心”:
http://www.xiaotong-db.com.cn/kfgj/oracle/kfgj/O8I_proc_jc_vc.htm
给了我启发。现在把本人的经验,贴出来让大家分享(以下是围绕着产生cpp文件来说明的)。
1、设置目录:
打开“tools->;Options”,转到“Directories”页,在"Show Directories for"中
1)选“Executable Files”,在列表中加入proc.exe的目录(ORACLE_HOME/bin):
如:D:/oracle/ora81/bin
2)选“Include Files”,在列表中加入proc*c/c++包含头文件的目录(ORACLE_HOME/PRECOMP/PUBLIC):
如:D:/ORACLE/ORA81/PRECOMP/PUBLIC
3)选“Library Files”,在列表中加入proc*c/c++ Lib所在的目录(ORACLE_HOME/PRECOMP/LIB/MSVC):
如:D:/ORACLE/ORA81/PRECOMP/LIB/MSVC
*注:我的oracle客户端程序是安装在D:/oracle/ora81下;
2、建立一MFC工程(这步在此不作介绍);
3、往工程中加入,Proc*c/c++的源和头文件(这步在此也不作介绍),例加入oratools.pc、oratools.h;
oratools.h

#ifndef __LZP_ORACLE_TOOLS_HEAD__
#define __LZP_ORACLE_TOOLS_HEAD__

class CLzpOracle
{
public:
CLzpOracle();
~CLzpOracle();

int ConnectDatabase(char *strConn);
};


#endif

oratools.pc

#include "stdafx.h"
#include "oratools.h"


/*SQL通讯区说明*/
EXEC SQL INCLUDE SQLCA;
/*SQL错误处理说明语句*/
EXEC SQL WHENEVER SQLERROR CONTINUE;
EXEC SQL WHENEVER NOTFOUND CONTINUE;


CLzpOracle::CLzpOracle()
{
}

CLzpOracle::~CLzpOracle()
{
}

int CLzpOracle::ConnectDatabase(char *strConn)
{
EXEC SQL BEGIN DECLARE SECTION;
char usrpwd[60];
EXEC SQL END DECLARE SECTION;

strcpy(usrpwd,strConn);
EXEC SQL CONNECT :usrpwd;
if (sqlca.sqlcode < 0)
{
return -1;
}
return 0;
}

4、右击新加入的proc*c/c++文件(如oratools.pc),选择"settings..."到"project settings",然后Custom Build页:
在Commands下写入命令:proc 输入入文件名 oname=输出文件名(如:proc oratools.pc oname=oratools.cpp) 注如果要生成.cpp文件,oname=这项一定要填,不然它会自动生成.c文件
在Outputs下写入输出文件名(如oratools.cpp),这项我刚开始以为不写上面的oname=,会输出这里填写的文件名,但事实上并不是这样;
5、然后编译工程,它将会自动预编译产生c/c++文件(如oratols.cpp),然后把这个文件作如下修改:
1)把#include "stdafx.h"提到最前面;
2)把函数的定义用下面的括起
#ifdef __cplusplus
extern "C" {
#endif

#ifdef __cplusplus
}
#endif

#ifdef __cplusplus
extern "C" {
#endif


/* SQLLIB Prototypes */
extern void sqlcxt (void **, unsigned long *,
struct sqlexd *, const struct sqlcxp *);
extern void sqlcx2t(void **, unsigned long *,
struct sqlexd *, const struct sqlcxp *);
extern void sqlbuft(void **, char *);
extern void sqlgs2t(void **, char *);
extern void sqlorat(void **, unsigned long *, void *);

/* Forms Interface */
static const int IAPSUCC = 0;
static const int IAPFAIL = 1403;
static const int IAPFTL = 535;
extern void sqliem(char *, int *);

#ifdef __cplusplus
}
#endif

6、把lib文件加入工程中:
project->;settings->;link->;object/library modules中加入oraSQL8.lib.
7、最后编译链接产生可执行文件。注:如果重编译整个工程时,如果是产生.cpp文件一定别忘了修改预编译产生的文件。

 

posted on 2011-07-19 11:36  DoubleSnake  阅读(1898)  评论(0编辑  收藏  举报