添加“代理共享库”时奇怪无效的连接句柄?

时间:2011-01-07 14:29:58

标签: c

我在Solaris SPARC系统上做了一些C代码,并且在我的集成测试中发现了“不一致”。

我正在对SAP系统进行一些测试并使用SAP RFCSDK,但SAP根本不是我的问题.....我想知道我是否缺少一些编译选项等

让我试试解释:

客户代码 - >共享库(自定义) - >共享库(SAP) - > SAP === 100%

客户代码 - >共享库(自定义PROXY) - >共享库(自定义) - >共享库(SAP) - > SAP == INVALID句柄

因此,如果没有太多细节,您是否听说过任何“句柄”变得无效只是因为另一个共享库是“介于”客户端和“目标共享库”之间?

引起INVALID HANDLE问题的PROXY共享库没有什么特别之处,只是“通过”

#include <stdio.h>
#include <stdlib.h>
#include "saprfc_receiver_proxy.h"
#include "saprfc_receiver.h"

int saprfc_receiver_proxy_initialize(char *sap_hostname, char *sap_client,
       int sap_sysnbr, char *sap_language, char *sap_user, char *sap_password,
       int sap_rfctrace){
    return saprfc_receiver_initialize(sap_hostname, sap_client, sap_sysnbr,
               sap_language, sap_user, sap_password, sap_rfctrace);
}

int saprfc_receiver_proxy_beginTransaction(char *tid){
    return saprfc_receiver_beginTransaction(tid);
}

int saprfc_receiver_proxy_commitTransaction(char *tid){
    return saprfc_receiver_commitTransaction(tid);
}

int saprfc_receiver_proxy_rollbackTransaction(char *tid){
    return saprfc_receiver_rollbackTransaction(tid);
}

int saprfc_receiver_proxy_writeMessage(char *tid, char *buffer){
    return saprfc_receiver_writeMessage(tid, buffer);
}

int saprfc_receiver_proxy_openConnection(){
    return saprfc_receiver_openConnection();
}

int saprfc_receiver_proxy_closeConnection(){
    return saprfc_receiver_closeConnection();
}

编译非常简单,这里是直接调用SAP共享库的共享库编译:

/usr/sfw/bin/gcc -m64 -R/usr/sfw/lib/64 -c -fPIC -I../include \
    -I../rfcsdk/include saprfc_receiver.c -o saprfc_receiver.o
/usr/sfw/bin/gcc -m64 -R/usr/sfw/lib/64 -shared -L../rfcsdk/lib/ \
    -o libsaprfc_receiver.so saprfc_receiver.o -lrfccm -lrfc

这是代理共享lib编译:

/usr/sfw/bin/gcc -m64 -R/usr/sfw/lib/64 -c -fPIC -I../include \
    saprfc_receiver_proxy.c -o saprfc_receiver_proxy.o
/usr/sfw/bin/gcc -m64 -R/usr/sfw/lib/64 -shared -L../lib \
    -o libsaprfc_receiver_proxy.so saprfc_receiver_proxy.o -lsaprfc_receiver

当使用C来确保“中间的共享库”不会影响状态时,是否有任何“黄金法则”?

很抱歉,如果我的解释很糟糕,我会稍后尝试编辑这篇文章,详细信息......

最重要的是,如果客户端直接调用共享库(自定义),那么它可以工作,我在SAP句柄之间添加SIMPLE代理的那一刻就变坏了。

0 个答案:

没有答案