Microsoft MVP성태의 닷넷 이야기
COM 개체 관련: 8. IDL 구문에서 구조체를 pack 하는 방법 [링크 복사], [링크+제목 복사],
조회: 15268
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 

제가 운영하는 데브피아의 "Sys.NET" 클럽에 있던 질문/답변입니다.

[질문: 이동현(magicast)]
안녕하세요.
COM으로 구조체를 주고 받으려 합니다.
그런데, 일반적으로 구조체는 8byte로 record align이 되어 있습니다.
idl에서나 vc++에서나 디폴트로 이렇게 잡혀있더군요.
그런데 구조체를 원하는 임의의 바이트로 pack 하려고 하면 어떻게 해야 하는지 궁금합니다.
vc++에서는 #pragma라는 vc++ 확장 키워드를 이용하여 가능합니다만,
idl에서는 어떻게 해야 할지 모르겠군요.
방법이 없을지도 모르겠다는 생각이 듭니다. -_-;
좋은 하루 되시기 바랍니다.


[답변: 정성태(kevin25)]
흥미로운 질문이었네요. 실무에서 능히 있을 만한 상황입니다.

어쨌든, IDL 파일이 VC++과의 컴파일에서 그대로 이용되는 것은 아니지요. 따라서, IDL 파일을 컴파일해서 나오는 헤더 파일에서 직접 구조체를 찾아서 #pragma 구문을 집어넣는 방법이 있을 것입니다.
물론, IDL 파일이 다시 컴파일이 되어지면, 또 집어넣어야 하는 불편함이 있을 것입니다.

그런데... ^^ 혹시나 해서, IDL 구문에 pragma를 넣어보니, 이게 웬일입니까? 그대로 헤더 파일에 가져다 놓네요.
안심하시고, IDL에서도 pragma를 이용하셔도 됩니다.

노파심에서, 덧붙이는데요. IDL 파일에서 구조체를 선언할 때,

#pragma pack( push, 1 )
typedef struct _ComplexData {
char ch;
int x;
int y;
} ComplexData;
#pragma pack(pop)

위와 같이, 앞뒤로 pack 문장을 넣어주면 좋겠지요. ^^








[최초 등록일: ]
[최종 수정일: 6/23/2023]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 




1  2  3  4  5  6  7  8  9  [10]  11  12  13  14  15  ...
NoWriterDateCnt.TitleFile(s)
13402정성태8/20/20233753닷넷: 2137. ILSpy의 nuget 라이브러리 버전 - ICSharpCode.Decompiler
13401정성태8/19/20233974닷넷: 2136. .NET 5+ 환경에서 P/Invoke의 성능을 높이기 위한 SuppressGCTransition 특성 [1]
13400정성태8/10/20233821오류 유형: 874. 파이썬 - pymssql을 윈도우 환경에서 설치 불가
13399정성태8/9/20233646닷넷: 2135. C# - 지역 변수로 이해하는 메서드 매개변수의 값/참조 전달
13398정성태8/3/20234546스크립트: 55. 파이썬 - pyodbc를 이용한 SQL Server 연결 사용법
13397정성태7/23/20234072닷넷: 2134. C# - 문자열 연결 시 string.Create를 이용한 GC 할당 최소화
13396정성태7/22/20233831스크립트: 54. 파이썬 pystack 소개 - 메모리 덤프로부터 콜 스택 열거
13395정성태7/20/20233632개발 환경 구성: 685. 로컬에서 개발 중인 ASP.NET Core/5+ 웹 사이트에 대해 localhost 이외의 호스트 이름으로 접근하는 방법
13394정성태7/16/20233590오류 유형: 873. Oracle.ManagedDataAccess.Client - 쿼리 수행 시 System.InvalidOperationException
13393정성태7/16/20233893닷넷: 2133. C# - Oracle 데이터베이스의 Sleep 쿼리 실행하는 방법
13392정성태7/16/20233755오류 유형: 872. Oracle - ORA-01031: insufficient privileges
13391정성태7/14/20233824닷넷: 2132. C# - sealed 클래스의 메서드를 callback 호출했을 때 인라인 처리가 될까요?
13390정성태7/12/20233640스크립트: 53. 파이썬 - localhost 호출 시의 hang 현상
13389정성태7/5/20233685개발 환경 구성: 684. IIS Express로 호스팅하는 웹을 WSL 환경에서 접근하는 방법
13388정성태7/3/20233924오류 유형: 871. 윈도우 탐색기에서 열리지 않는 zip 파일 - The Compressed (zipped) Folder '[...].zip' is invalid. [1]파일 다운로드1
13387정성태6/28/20233982오류 유형: 870. _mysql - Commands out of sync; you can't run this command now
13386정성태6/27/20234109Linux: 61. docker - 원격 제어를 위한 TCP 바인딩 추가
13385정성태6/27/20234296Linux: 60. Linux - 외부에서의 접속을 허용하기 위한 TCP 포트 여는 방법
13384정성태6/26/20234010.NET Framework: 2131. C# - Source Generator로 해결하는 enum 박싱 문제파일 다운로드1
13383정성태6/26/20233758개발 환경 구성: 683. GPU 런타임을 사용하는 Colab 노트북 설정
13382정성태6/25/20233806.NET Framework: 2130. C# - Win32 API를 이용한 윈도우 계정 정보 (예: 마지막 로그온 시간)파일 다운로드1
13381정성태6/25/20234239오류 유형: 869. Fatal Python error: init_fs_encoding: failed to get the Python codec of the filesystem encoding
13380정성태6/24/20233619스크립트: 52. 파이썬 3.x에서의 동적 함수 추가
13379정성태6/23/20233653스크립트: 51. 파이썬 2.x에서의 동적 함수 추가
13378정성태6/22/20233523오류 유형: 868. docker - build 시 "CANCELED ..." 뜨는 문제
13377정성태6/22/20237443오류 유형: 867. 파이썬 mysqlclient 2.2.x 설치 시 "Specify MYSQLCLIENT_CFLAGS and MYSQLCLIENT_LDFLAGS env vars manually" 오류
1  2  3  4  5  6  7  8  9  [10]  11  12  13  14  15  ...