안녕하십니까?
DLL에 통신 컴포넌트를 사용할수 있는지 묻던넘입니다.
컴포넌트사용및 DLL의 일반적인 문자열은 주고 받을수 있습니다.
문제는 장비에서 송신한 데이터 중에 널(Ascii Code: 00h)값이 포함 되어 있는 경우 입니다.
송신한 문자는 15바이트 인데 정작 읽어보면 3바이트밖에 읽지를 못합니다.
데이터 타입을 PChar로 사용하고 있으므로 이는 문자열의 종결을 나타내는것을 하루꼬박 삽질을 하던중 알게 되었습니다.
그래서 수신된 데이터를 byte로 저장하여 포인터를 돌려주고 있는데 수신된 데이터의 길이가 가변적입니다.
따라서 리턴되는 값을 데이터의 포인터 시작 위치값과 데이터 길이를 돌려 주고 싶은데 Function에선 하나밖에 못돌려주니 무슨 뾰족한 수가 없을까요?
컴포넌트의 이벤트에 보면 procedure에서 몇개의 인자를 가져다 쓸수 있는데 이밥법으로 dll에서 가능하다면 어떻게 하는건지 예제좀 부탁 드리겠습니다.
요런식 procedure ComPortRxChar(Sender: TObject; Count: Integer);
---테스트 구성도---
PC Application ↔ DLL ↔ PC RS232C포트 ↔ 장비 RS232C포트
---간략 설명---
PC에서 현 상황을 알리는 커맨드 전송
장비는 현재 상황의 데이터를 송신함
송신 문자열 중간에 00h의 널 캐릭터 값을 포함
begin
Result := -1; <= 기본적으로 -1 에러^^
Data := 데이터의 포인터 시작 위치값;
Result := 데이터 길이;
end;
이런식이 더 나을듯 합니다.