2013-03-19 2 views
1

누군가가 델파이로 작성된 exe와 dll을 TobjectList가 들어있는 포인터로 교환 할 수 없다는 것을 확인해 줄 수 있습니까? 실행 코드에델파이에서 exe와 DLL 사이의 TobjectList

Class definition shared between DLL and EXE 
TCMStack = CLASS(TObject) 
PRIVATE 
FEquipment: TCMEquipment;   /// equipement with associated constraints 
FNbCoils: integer;     /// coils used 
FListeCoils: TCoilsList;   ///coil list associaed with a stack 
.... 

:

... 
/// Transfer business information to optimisation module 
/// fOptimisation is a instance of class 
fOptimisation.TransfererDonneesMetiersDansOptimisation(@TStack, LEVEL_OPTIM_1, false); 

런타임 패키지를 사용하지 않는 당신은 모듈 경계를 넘어 델파이 객체를 전달할 수없는 TObjectList와

답변

5

를 제외하고 좋은에서 @TStack의 내용. 따라서 DLL과 EXE 간에는 불가능합니다.

이 제한의 이유는 모듈 경계를 넘어 객체를 전달하려면 모듈간에 유형을 공유해야하기 때문입니다. 그리고 그것은 DLL과 EXE로는 불가능합니다. 서로 다른 모듈 간의 유형 공유는 런타임 패키지의 주요 기능입니다. documentation

은 제한 다음과 같이 설명합니다 :

라이브러리가 크게 그들이 내보낼 수 있습니다 것에 패키지보다 더 제한되어 있습니다. 라이브러리는 상수, 유형 및 일반 변수를 내보낼 수 없습니다. 즉, 라이브러리에 정의 된 클래스 유형은 해당 라이브러리를 사용하는 프로그램에서 으로 볼 수 없습니다. 간단한 절차 및 기능 이외의 항목을 내보내려면 패키지를 사용하는 것이 좋습니다. 라이브러리는 다른 프로그래밍과의 상호 운용성이 필요한 경우에만 고려해야합니다.

DLL을 사용해야하는 경우 다른 방법으로 상호 운용성을 찾아야합니다. 하나의 좋은 옵션은 인터페이스를 사용하는 것입니다.

+0

이 답변 이상을 원하십니까? –