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

时间:2015-04-26 19:21:52

标签: 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_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函数的输入client_id值:46535657453244546 我在C函数中得到的client_id值:78607336

如何修复代码以便C ++函数可以从Oracle获得64位输入。我被困了几个小时。非常感谢!抱歉我的英语不好。

0 个答案:

没有答案