将64位数字Oracle传递给C++ DLL库

将64位数字Oracle传递给C++ DLL库,c++,c,oracle,C++,C,Oracle,我建立了一个Oracle数据库。在写入期间,触发事务触发器,执行外部C dll函数。以下是函数: create or replace FUNCTION KOSARServerTrigDelMultiClients ( ipaddr IN VARCHAR2, datazone in VARCHAR2, client_id IN NUMBER, trans_id IN BINARY_INTEGER, cosar_keys IN VARCHAR2, flags IN BINARY_INTEGE

我建立了一个Oracle数据库。在写入期间,触发事务触发器,执行外部C dll函数。以下是函数:

create or replace FUNCTION KOSARServerTrigDelMultiClients  ( ipaddr IN VARCHAR2, datazone in VARCHAR2, 
client_id IN NUMBER, 
trans_id IN BINARY_INTEGER, cosar_keys  IN VARCHAR2, flags IN BINARY_INTEGER)       RETURN BINARY_INTEGER       AS LANGUAGE C          LIBRARY COSAR_DLL_LIB           NAME "KOSARTrigDelMultiClient"          PARAMETERS (               ipaddr,             ipaddr LENGTH,              datazone,           datazone LENGTH,            cosar_keys,             cosar_keys LENGTH,              trans_id,               client_id,flags);
注意,client_id的类型是number,它可以保存64位整数

下面是C函数的外观:

extern "C" _export int KOSARTrigDelMultiClient( 
        const char* cstr_cacheServerAddress,
        int cacheServerAddress_len,
        const char* cstr_datazone, 
        int datazone_len, 
        const char* cstr_key, 
        int key_len, 
        int trans_id,
        long long client_id,
        int flags)
{
    // do something
}
问题是:我在C中获得的client_id值与Oracle函数的输入不匹配。比如说,

Oracle函数的输入客户端id值:4653565745324456 我在C函数中得到的客户机id值:78607336


如何修复代码,使C++函数可以从Oracle中获得64位输入。我被困了好几个小时。谢谢!对不起,我的英语不好。

我很确定当你的C函数应该使用OCINumber*client\u id时,不会太长。数字类型不是64位整数,而是固定的或浮点数。您使用的是Oracle C++库?看看OCINumberFromInt。这应该对你有用。我又读了一遍你的问题。你真的需要二进制整数吗?尝试使用OCINumber作为传递值。若您需要数字作为标志持有者,那个么也许您应该将用户RAWx转换为字节[]。如果您使用64位Oracle,并且无法将64位整数传递给外部过程,则应联系Oracle支持部门。谢谢您的评论。我试图使用oci图书馆的OCINumber*。当我使用include时,编译器无法检测头。我的临时解决方案是把长数作为字符串VARCHAR,然后用C++代码将其转换成长。