자유롭게 질의 및 응답을 할 수 있는 게시판입니다. 개발자 여러분의 답변이 큰 도움이 됩니다.
- 제품설치/등록 오류 문의: 설치/등록 Q&A 이용 (제품 구매 고객 한정)
Delphi C++ Dll 구조체 데이터형식 관련 문의
2020.03.25 08:40
본 게시판은 개발자들이 자유롭게 질문과 답변을 공유하는 게시판입니다.
* 따라서 최대한 정중하게 질문을 올려 주세요.
* 질문을 상세히 작성해 주실 수록 좋은 답변이 올라 옵니다.
* 다른 분들도 참고할 수 있도록 결과 댓글 필수(또는 감사 댓글)
(결과 댓글을 달지 않는 경우 다음 질문에 대한 답변이 달리지 않는 불이익이 있을 수 있습니다.)
-----------------------------------------------------------------------------------------------
안녕하세요
C++로 Dll을 만들어 구조체 형식으로 데이터를 주고 받는데 Byte형식 데이터를 주고 받을때
Byte 다음에 오는 데이터들이 제대로 들어오지 않습니다.
확인해보니 Byte에 8비트보다 큰 비트가 들어가서 다음 데이터들이 당겨져서 들어오는 문제가 있는 것으로
확인되었는데 해결할 방법이 있을까요?
댓글 2
-
험프리
2020.03.27 09:29
-
happy
2020.03.27 12:32
메모리 할당과 포인터 문제라기 보다는
컴파일러가 구조체를 어떤 식으로 pack 하는 가의 문제 입니다.
가령 다음과 같은 구조체가 있다고 할 때
struct S
{
char c1;
int d1;
} ;
컴파일러는 d1을 c1 바로 다음에 배치하지 않고
CPU의 메모리 버스에 맞추어서 4바이트 align 으로 빈 곳을 패딩으로 채운 후
배치 합니다.
CPU 메모리 버스를 효율적으로 액세스 하기위한 옵티마이징 이죠.
패딩 없이 c1 다음에 바로 d1이 오게 하려면 다음과 같은 식으로 할 수 있고
#pragma pack(push, 1)
struct S
{
char c1;
int d1;
} ;
#pragma pack(pop)
C++과 다른 언어 사이에 구조체를 패딩하는 방식을 컴파일 옵션을 통해서 일치 시켜주어야
구조체 데이타를 올바르게 액세스 할 수 있음.
Delphi C++ Dll 구조체 데이터형식 관련 문의
2020.03.25 08:40
본 게시판은 개발자들이 자유롭게 질문과 답변을 공유하는 게시판입니다.
* 따라서 최대한 정중하게 질문을 올려 주세요.
* 질문을 상세히 작성해 주실 수록 좋은 답변이 올라 옵니다.
* 다른 분들도 참고할 수 있도록 결과 댓글 필수(또는 감사 댓글)
(결과 댓글을 달지 않는 경우 다음 질문에 대한 답변이 달리지 않는 불이익이 있을 수 있습니다.)
-----------------------------------------------------------------------------------------------
안녕하세요
C++로 Dll을 만들어 구조체 형식으로 데이터를 주고 받는데 Byte형식 데이터를 주고 받을때
Byte 다음에 오는 데이터들이 제대로 들어오지 않습니다.
확인해보니 Byte에 8비트보다 큰 비트가 들어가서 다음 데이터들이 당겨져서 들어오는 문제가 있는 것으로
확인되었는데 해결할 방법이 있을까요?
댓글 2
-
험프리
2020.03.27 09:29
-
happy
2020.03.27 12:32
메모리 할당과 포인터 문제라기 보다는
컴파일러가 구조체를 어떤 식으로 pack 하는 가의 문제 입니다.
가령 다음과 같은 구조체가 있다고 할 때
struct S
{
char c1;
int d1;
} ;
컴파일러는 d1을 c1 바로 다음에 배치하지 않고CPU의 메모리 버스에 맞추어서 4바이트 align 으로 빈 곳을 패딩으로 채운 후배치 합니다.CPU 메모리 버스를 효율적으로 액세스 하기위한 옵티마이징 이죠.패딩 없이 c1 다음에 바로 d1이 오게 하려면 다음과 같은 식으로 할 수 있고#pragma pack(push, 1)struct S{char c1;int d1;} ;#pragma pack(pop)C++과 다른 언어 사이에 구조체를 패딩하는 방식을 컴파일 옵션을 통해서 일치 시켜주어야구조체 데이타를 올바르게 액세스 할 수 있음.
해당 이슈는 개발과 관련된 문제이기 때문에 답변드리기 어렵습니다.
실행파일과 DLL 측에서 메모리 할당과 참조 포인터 전달이 올바르게 진행되는지 다시한번 검토해보시기 바랍니다.
또한 공유메모리를 이용하는 방법도 있으니 참고해보시면 좋을것 같습니다.
http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_tutorial&no=186
——————
답변에 대한 결과를 남겨주시면, 다른 분들이 같은(비슷한) 문제 해결에 큰 도움이 됩니다.
(미리 답변 결과 등록 감사합니다.^^)