Microsoft MVP성태의 닷넷 이야기
.NET Framework: 34.2. 다시... 제가 질문한 내용입니다. ^^ [링크 복사], [링크+제목 복사],
조회: 18405
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 
부모글 보이기/감추기

일단, 방법은 알게 되었지만. 근본적으로 잘 이해가 더욱 안됩니다. ^^
차라리 LPWSTR 이 아닌 다른 것이었다면 그나마 이해의 조각을 맞춰보겠는데. 하필 LPWSTR 이라서 더더욱 혼동이 됩니다.

BSTR 은
typedef OLECHAR *BSTR;
이라고 정의되어 있지요.

typedef WCHAR OLECHAR;
로 내려가고.

typedef wchar_t WCHAR;
결국 BSTR == wchar_t * 와 같다는 것이죠.


답변하신 것 중에 BSTR 과 wide string 이 다른 것처럼 말씀을 하셨는데요.
LPWSTR 도 typedef 정의를 보면 다음과 같이 되어 있습니다.
typedef WCHAR *LPWSTR;

즉,,, LPWSTR == wchar_t * 와 같다는 것입니다.

하나의 wchar_t * 표현을 가지고 BSTR 과 LPWSTR 로 부를 뿐인데, 내부적으로 어떤 근거로 구별을 해서 마샬링을 하는지에 대해서 궁금한 것입니다.

다시 살펴보면 LPWSTR 이든, BSTR 이든 결국 다음과 같이 변수를 정의할 수 있는데요.
wchar_t *pTest1 = ::SysAllocString( L"test" );
wchar_t *pTest2 = L"test";
위의 pTest1 은 BSTR 로 마샬링을 해야 하고, pTest2 는 LPWSTR 로 마샬링해야 하는 이유가 이해가 안됩니다.

실제로 위의 pTest1 과 pTest2 가 가리키는 메모리를 확인해 봐도, 그 두개의 차이점을 발견할 수 없습니다.
결과는 다음과 같이 나오는 데요.

74 00 65 00 73 00 74 00 00 00
t e s t \0


어떤 근거로, 동일한 메모리에 대해서, 동일한 wchar_t * 변수를 전달하는 데, ::SysAllocString 으로 할당하면 정상동작하고, L"" 로 할당하면 그렇지 않느냐는 것입니다.
말씀해 주신 그 URL 에서는 그에 대한 설명이 없는 것 같습니다. 한번 만 더 도움 좀 부탁드립니다. ^^








[최초 등록일: ]
[최종 수정일: 3/30/2005]

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

비밀번호

댓글 작성자
 




... 181  182  183  184  185  186  187  188  189  190  [191]  192  193  194  195  ...
NoWriterDateCnt.TitleFile(s)
239정성태6/1/200623497COM 개체 관련: 18. Internet Explorer는 Out-of-process COM 개체입니다.
238정성태6/1/200625406개발 환경 구성: 1. batch 파일에서 실행한 exe에서 batch 실행 문맥의 환경 변수 설정 [3]
236정성태6/1/200646130오류 유형: 1. [.NET COM+] UnauthorizedAccessException: 레지스트리 키 HKEY_CLASSES_ROOT\.... 에 대한 액세스가 거부되었습니다
235정성태6/1/200620694VS.NET IDE: 39. VS.NET 2003/2005에서도 제공되는 VS 6.0 MFC ClassWizard
234정성태4/14/200620335VC++: 24. error C2039: 'pOleStr' : is not a member of '_STRRET'
233정성태4/13/200619701.NET Framework: 70. Response.ContentType 과 Response.AddHeader( "Content-Type", "..." ) 의 차이
232정성태4/13/200619685.NET Framework: 69. Reusing C# Source Code Across Multiple Assemblies
231정성태4/13/200620084Team Foundation Server: 4. How to rename a Team Foundation Server
229정성태10/17/200621468.NET Framework: 68. Feb CTP 에서 동작하는 "Save XPS Document page(s) to .bmp" 예제 소스
230정성태4/13/200622055    답변글 .NET Framework: 68.1. -01 MSDN Magazine XPS Document 소스를 Feb CTP로 수정한 버전파일 다운로드1
228정성태4/13/200618201Team Foundation Server: 3. MSBUILD : warning : Visual Studio Team System for Software Testers or Visual Studio Team System for Software Developers is required to run tests as part of a Team Build.
227정성태4/13/200619697Team Foundation Server: 2. TFS 빌드 오류 유형 - MSBUILD: warning : Specified cast is not valid
226정성태4/13/200617680Team Foundation Server: 1. TFS 오류 유형 - TF50608: Unable to retrieve information for security object
225정성태10/17/200617277.NET Framework: 67. VS.NET 2005 도구 상자에 있는 Workflow Activity 항목의 아이콘 변경
223정성태4/13/200628625.NET Framework: 66. Microsoft .NET Framework 2.0 Configuration 수동 설치파일 다운로드1
224정성태4/13/200622386    답변글 .NET Framework: 66.1. "Microsoft .NET Framework 2.0 Configuration" MSI 설치 파일 버전파일 다운로드1
222정성태4/13/200621191.NET Framework: 65. VS.NET 2005: 파일 기반 웹 프로젝트의 "Virtual Path" 제거
220정성태4/13/200619148.NET Framework: 64. ClickOnce - 배포 시 오류 : "Error: An unexpected error occurred -- The parameter is incorrect."
219정성태4/13/200634025.NET Framework: 63. ClickOnce - 최초 실행 시 보안 경고창 없애는 방법 [1]
216정성태4/13/200620949스크립트: 8. 3월 1일 ActiveX Patch 적용 후, JS 로 수정한 임베딩 컨트롤이 여전히 비활성화 되는 문제 [2]
215정성태4/13/200622296.NET Framework: 62. ASP.NET 웹 컨트롤 렌더링 가로채기
214정성태4/13/200621630.NET Framework: 61. DateTime - DateTime = 사이의 "Month" 수 계산 [2]
213정성태4/13/200624079.NET Framework: 60. localhost 이외의 컴퓨터에서 asmx 테스트 페이지 호출 [1]
218정성태4/13/200622173    답변글 .NET Framework: 60.1. asmx 테스트 페이지를 보여주고 싶지 않을 때
211정성태4/13/200620394VS.NET IDE: 38. VS.NET 2005 - "Export Template" 메뉴
210정성태4/13/200619727.NET Framework: 59. EXE 참조 가능 - VS.NET 2005 [2]
... 181  182  183  184  185  186  187  188  189  190  [191]  192  193  194  195  ...