anabilgisayar üzerinde C ile yazılmış bir satıcı paket üzerinde> COBOL Interlanguage iletişim işlevselliğini kullanıcı çıkışından var bir kısmını geçersiz kılmak için bir seçenek sunar. sağlanan C fonksiyonu prototipidir:C - ana bilgisayar
extern int SomeExit (void * Parameters,
void * Record1,
void * Record2,
char ComparisonType,
char * RankString,
void * NotUsed1,
int * NotUsed2)
öncelikle bir COBOL dükkanı I (a DLL olarak) Enterprise COBOL 4.2 programını tanımlanır olarak IBM ILC kılavuzunda verilen kuralları takip çalışırken çıkış uygulamak için (https://www.ibm.com/support/knowledgecenter/en/SSLTBW_1.13.0/com.ibm.zos.r13.ceea400/clcccb5.htm#clcccb5) ve bu eski PAYLAŞIM sunumundaki örnekler: http://www-01.ibm.com/support/docview.wss?uid=swg27003846&aid=1 ancak sonuçta ortaya çıkan program çıkış olarak ve benim DISPLAY
iletimden önce çağrılıyor. Benim varsayımım, alıcı veri yapılarını doğru şekilde beyan etmemem. Aşağıda, mevcut test kodumun bir pasajı var (adlandırma kurallarımı görmezden geliyorum - bu, aramayı kanıtlamak için bir prototiptir ve temel arama çalışmasına sahip olduğumda şirket içi standartlarımıza yeniden yazılır).
IDENTIFICATION DIVISION.
PROGRAM-ID. "SomeExit".
...
LINKAGE SECTION.
01 WS-PARAMETERS-POINTER USAGE IS POINTER SYNCHRONIZED.
01 SORT-PASS-RECORD1-POINTER USAGE IS POINTER SYNCHRONIZED.
01 SORT-PASS-RECORD2-POINTER USAGE IS POINTER SYNCHRONIZED.
01 WS-COMPARISION-TYPE PIC X.
01 WS-RANK-STRING-POINTER USAGE IS POINTER SYNCHRONIZED.
01 WS-NOT-USED1-POINTER USAGE IS POINTER SYNCHRONIZED.
01 WS-NOT-USED2-POINTER USAGE IS POINTER SYNCHRONIZED.
01 WS-RETURN PIC S9(9) USAGE IS BINARY.
...
PROCEDURE DIVISION USING BY VALUE WS-PARAMETERS-POINTER
SORT-PASS-RECORD1-POINTER
SORT-PASS-RECORD2-POINTER
WS-COMPARISION-TYPE
WS-RANK-STRING-POINTER
WS-NOT-USED1-POINTER
WS-NOT-USED2-POINTER
RETURNING WS-RETURN.
DISPLAY 'IN EXIT'.
...
MOVE 0 TO WS-RETURN.
GOBACK.
olağandışı sonlanma geçerli:
CEE3250C The system or user abend U 016 R=00000000 was issued.
From entry point main at compile unit offset +00000192 at entry offset +00000192 at address 28500ECA.
satıcı kodu dinamik olarak DLL çağırır. DLL'yi sildiğimde, çıkışın bulunamadığını bildiren bir ileti alıyorum ve bu yüzden C kodu onu çağırmaya çalışıyor gibi görünüyor.
Ben, BY VALUE
bırakarak (bu varsayılan anlamak rağmen) BY REFERENCE
kullanarak ve gerçek yapısı tanımlarla POINTERs
değiştirilmesi dahil PROCEDURE DIVISION USING
çeşitlemelerini çalıştılar. COBOL rutinine aktarılan parametreleri nasıl yapılandıracağımı el kitabını yanlış anlamış mıyım?
Düzenleme: satıcı ile açık bir destek bileti var ama onlar henüz kullanışlı bir şey ile vermiş değil.
Teşekkür David Ben Bono öneri başına çağıran yapısının daha iyi anlaşılması dayalı bir çözüm belirlemek başardı yorumlarına
Hangi abend? Hangi programda yer değiştirme? Neden her şey için DEĞERLE ', ben sadece karşılaştırma türü için düşünürdüm, diğerleri REFERANS BY? Bunun ne olduğunun farkında mısın? "SYNCHRONIZED" öğesini unutun. Neden LINKAGE SECTION öğeleriniz için WS-öneki? Kesinlikle WS-RETURN'u GOBACK'den önce bir şeye ayarlamalısınız. Enterprise COBOL'un hangi sürümü? C'den gelen çağrı DLL'den mi geliyor? Satıcıya sordunuz (lisansı destek içerir). –
Bir saatte 23 görünüm ve iki upvotes. Bu bir Vay canına! bir COBOL sorusu için. Muhtemelen COBOL'lu insanlardan daha fazla C ve Mainframe'den daha fazla Mainframe olmamalıdır :-) –
'PROGRAM-ID' nedir? Çıkış statik olarak bağlantılı mı, yoksa satıcı-rutininiz mi? –