이벤트를 프로그램합니다 DLL에 의해 구현 되나요? 어떻게 든 게시해야합니까?
2 - 프로그램 실행 중에 인스턴스화 된 객체를 dll 메소드로 전달할 수 있습니까?
3 - 다중 스레드 환경에서 2 개 이상의 스레드로 이벤트 (DLL에 정의 됨)를 호출하면 액세스 위반과 같은 문제가 발생합니까?
4 - 누군가 그것에 대해 읽을 수있는 좋은 책이나 종이를 알고 있습니까?
P .: 델파이 6에서 할 수 있습니까?를 사용하여 DLL 사용자 (초보자없는 프로그래머의 것들) 예를 들어, 이벤트 알림에서 구현 할 수 때이 프로그램 수행 중 상황을 궁금 델파이
답변
1) 아니오. Google for DLL vs BPL. 이 주제는 1997 년 이후 되풀이됩니다. BPL은 Pascal 용입니다. DLL은 Windows 용입니다. Windows에는 개체가 없습니다. 그러나 COM 인터페이스가
당신은 또한 시도 할 수 있습니다 (귀하의 파스칼 유형의 SUP-설정되어 있습니다 COM 정의 유형의 IUnknown는, 이벤트 콜백이 아니다) "할 수있는 DLL에 대한 JCL except_stack_list 일?"http://newsportal.delphi-jedi.org/thread_frameset.php?group=jedi.jcl
에서 스레드2) IUnkown
및 COM 표준화 된 데이터 유형을 사용합니다. 그 이외에 컴파일러의 타입 안전성을 오버라이드합니다. 즉, 자신의 파스칼 - 바이너리 안전 레이어를 구현하고 제공해야 함을 의미합니다.
3) 호출 수신자와 발신자 모두에 따라 다릅니다. 둘 다 재진입 가능하다면 재발 할 수 있습니다. 그렇지 않은 경우 오류가 발생합니다.
4)는 원하는 것을 따라 달라집니다.
DLL의 맛을보고 싶다면 어셈블러 책을 다운로드 한 다음 파스칼 대신 asm에서 프로 시저를 구현하는 방법에 대한 델파이 설명서를 참조하십시오. 특히 다른 Delphi 버전의 모든 데이터 유형을 이진 형식으로 표현하는 것이 좋습니다. 델파이 표준 형 안전을 거부한다면, 당신은 당신 자신의 것을 제공 할 필요가 있습니다.
COM을 맛보고 싶다면 COM 개체 구현 및 사용에 대한 COM 및 Delphi 설명서 정보를 얻으십시오.
BPL을 맛 보려면 런타임 패키지에 대한 Delphi 매뉴얼을 읽으십시오. 그들은 델파이의 일등 시민이며 추가 도서는 선택 사항입니다.
가장 재사용 가능한 COM 개체를 사용하여 구현할 수있을 것 같아요. COM 객체가 DLL 및 일부 응용 프로그램에서 읽을 수있는 인터페이스를 제공하는 방법이 있습니까? 실제로 객체를 필요로하지 않습니다. 그때 액세스 할 수있는 방법이 필요합니다 ... 내가 필요한 것은 주어진 시간에 public 메소드를 호출하는 것입니다. – EProgrammerNotFound
우선 - BPL을 사용할 수없는 이유는 무엇입니까? 델파이가 아닌 다른 언어로 객체를 사용한다면 델파이 TObject는 전혀 사용되지 않을 것입니다 (다른 델파이 버전은 다른 언어입니다). –
그런 다음 공개 코드 엔트리 포인트 만 필요하면 객체에 대해 잊어 버리십시오. 공개 절차/기능을 수행하십시오. 하지만 그들은 표준 윈도우 함수가 될 필요가있다. 즉,'stdcall' 호출 규칙과 모든 매개 변수가 정수가되어야 함을 의미한다. 포인터 (문자에 대한 포인터 - PAnsiChar - 메모리 관리 책임 설정 후 문자열을 전달하는 방법) 또는 float 싱글 또는 더블). 다시 말하지만 BPL에서 일반 TurboPascal 단위로 사용할 수있는 델파이에서 사용하려면 ('stdcall'을 제거하고 문자열을 포함한 모든 파스칼 데이터 유형을 전달할 수 있습니다). –
DLL을 사용할 때 모듈간에 델파이 개체를 공유 할 수 없습니다. 이를 위해서는 런타임 패키지를 사용해야합니다. –