有谁使用c++builder/borland c++ 5.5成功编译oracle的proc接口程序?

guo 2001-08-11 05:13:18
从一本oracle开发的书上看到oracle 的proc接口代码只能用vc编译,不能使用bc编译,我在实际编译时在extern "c"处一直碰到语法错误

下面是一段出错的代码,大家帮着看一下有没有问题
// Prototypes
extern "C" {
void sqlcxt (void **, unsigned long *,
struct sqlexd *, const struct sqlcxp *);
void sqlcx2t(void **, unsigned long *,
struct sqlexd *, const struct sqlcxp *);
void sqlbuft(void **, char *);
void sqlgs2t(void **, char *);
void sqlorat(void **, unsigned long *, void *);
}

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

希望从bcb论坛有好消息,我实在不想从bcb转到vc上.
...全文
139 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
guo 2001-08-12
  • 打赏
  • 举报
回复
个位再给看看
Ykang 2001-08-12
  • 打赏
  • 举报
回复
我在BCB40上成功编译,没做任何改动啊,直接粘贴到程序中就行啦:
#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"

extern "C" {
void sqlcxt (void **, unsigned long *,
struct sqlexd *, const struct sqlcxp *);
void sqlcx2t(void **, unsigned long *,
struct sqlexd *, const struct sqlcxp *);
void sqlbuft(void **, char *);
void sqlgs2t(void **, char *);
void sqlorat(void **, unsigned long *, void *);
}

// Forms Interface
static const int IAPSUCC = 0;
static const int IAPFAIL = 1403;
static const int IAPFTL = 535;
extern "C" { void sqliem(char *, int *);}
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------


书生 2001-08-12
  • 打赏
  • 举报
回复
呵呵,听你说没考虑外地发展我就猜中了。项羽现在在网上吗?开QQ!
我刚运动完,回来上会网。
guo 2001-08-12
  • 打赏
  • 举报
回复
项羽兄过嫌了,我也就是知道coff2omf是将vc lib接口转化成borland c的lib接口的一个工具,bcb有段时间没搞了,就连if (a==13) 也写成if a=13了.

玉笛,我就在上海,去年8.26号来的,今年7.5号辞职,之后就一直在家给老婆做饭,感觉很没出息.
书生 2001-08-12
  • 打赏
  • 举报
回复
由于PC机的存储器地址是由段地址和偏移地址组合而成,每个段不能超过64K字节地址,因此同一个段内的地址存取,
仅用偏移地址就可以实现,用指针时,16位就可以了。称为近程指针near,当要在另一个段内取数据时,就要跨越段,
即要指明存取段的段地址和偏移地址,这时段地址寄存器所存段地址要变,因此在使用指针指向另一个段内地址时,
就要用32位表示(即段地址:偏移地址),这类指针,称为远程指针,是far型.

far为远程指针

远程指针是指32位的指针,它表示段地址:偏移地址,如定义远程指针P指向B500段的2号地址,即B500:0002,则可写作:
char far*p=(char far*)0xB5000002;
因而用远程指针可以指向任何的数据段内地址,在大数据内存模式下,当跨越段进行数据存取时(即存取超过64K的数据),可以采用
远程指针。当使用far型指针时,因要进行跨段寻址,数据段寄存器的值要更换,因而加长了程序的执行时间。
另外远程指针的值在进行加减时,只有偏移的地址部分进行运算,段地址不参加运算,即段地址不变,因此会出现折回现象。
luhongjun 2001-08-12
  • 打赏
  • 举报
回复
guo
数据库方面我服你,以为编程可以和你比一比了,咳,编程也不是你的对手.
我就是没解决了.

书生 2001-08-12
  • 打赏
  • 举报
回复
呵呵,应该是没什么问题的,现在很少用far声明了。

你不是有家室的人了吧? 怎么不考虑一下去沿海?不过确实先要探好路。
guo 2001-08-12
  • 打赏
  • 举报
回复
多谢玉笛关心,但我还是没有找到合适的工作,辜负我一腔热血呀!

coff2omf %ORACLE_HOME%/precomp/lib/msvc/orasql8.lib brdorasql8.lib
coff2omf %ORACLE_HOME%/precomp/lib/msvc/orasqx8.lib brdorasqx8.lib

将生成borland c适用的lib,在编译时将lib路径指向它(建议将两个文件与msvc分开存放,我对vc过敏,所以我另建了一个bc目录)
另外就是那个far声明了,将far删除后可以编译而且正常(但不能下最终结论).
书生 2001-08-12
  • 打赏
  • 举报
回复
去看看
书生 2001-08-12
  • 打赏
  • 举报
回复
怎么解决的?

工作有消息了么?
书生 2001-08-12
  • 打赏
  • 举报
回复
学习。
guo 2001-08-12
  • 打赏
  • 举报
回复
问题已经用其它方法解决,哈哈borland还是我心中的borland!!!!
但有个小问题,希望各们也帮着看一下!
http://www.csdn.net/expert/topic/234/234593.shtm
luhongjun 2001-08-11
  • 打赏
  • 举报
回复
看了好长时间,没看出什么问题,先保存了.
coldbloodfox 2001-08-11
  • 打赏
  • 举报
回复
现在没时间
加个书签而已
以后再看
:)
nicolas 2001-08-11
  • 打赏
  • 举报
回复
我想应该可以用BCB编译的,BCB甚至可以编译VC的代码,只是要多作些设置,并对代码作一小部
分的修改

2,596

社区成员

发帖
与我相关
我的任务
社区描述
Sybase相关技术讨论区
社区管理员
  • Sybase社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧