我在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代理的那一刻就变坏了。