큰일입니다.
몇달동안 개발한 시스템을 오픈할 시점에 다음과 같은 사건을 발견했습니다.
해결책좀 주세요.
[사건]
델파이 5.0으로 Active-form을 이용하여 각 모듈별 OCX를 만들었습니다.
이들 OCX는 유기적 관계가 있으므로 Parameter를 전달하면서 서로를 call합니다.
물론 Parameter는 DLL방식처럼 직접 전달하지는 못하고(직접전달이 가능한가요?)
중간매게체를 이용하지요!(TEXT파일이나 Registry)
원할하게 돌아가더라구요!
그런데 A OCX가 B OCX를 CALL하고, B OCX가 C OCX를 CALL할 수 도 있고, 다시 A OCX를 CALL할 수 있죠!
이를 화살표로 표현하면 (A->B->C->A : Brower 4개 구동중, 또는 A->B->A : Brower 3개 그동중) 입니다.
구지 제약을 가하지 않으려고 합니다.
이런경우( A OCX 처럼 2개가 동시에 구동될 경우 ) 오류가 발생합니다.
두개중 하나의 A OCX를 닫으면, 남아있는 A OCX에서 db관련 access를 할때, 다음과 같은 오류가 발생합니다
"Access violation at address 405C4E7E in module 'VCLDB50.BPL', Read of address 0214861C"
그리고, 남아있는 A OCX에 이미 open된 Clientdataset을 마음대로 닫아버리죠!
물론, 화면에는 이전에 가져온 데이터가 보이고 새로운 DB Acess이외의 작업은 가능합니다.(예: db grid의 내용을 출력 등등)
관찰결과 남아있는 A OCX에서 새로운 DB관련 작업을 할때만 발생하는 것 같습니다.
혹시, 먼저 Close되는 A OCX가 영향력을 행사하는 것 같습니다.
어떻게 이를 막아야 할까요?
※ 다른 ocx를 call하는 방법을 Component의 Internet메뉴의 TwebBrowser를 이용합니다.
처음에는 CreateOleObject를 이용하였는데, 여러개 띄울때 오히려 불안정하여 TwebBrowser를 이용하게 되었지요?
사건의 진상을 두서없이 쓴것 같네요!
혹시, 머리가 아프시지는 않았는지~~~~~~~~~죄송