[완료]ATL COM 작성시 메소드 인자로 문자열 사용/ 레지스트리 삭제 질문입니다.
안녕하세요
ATL을 공부하고 있습니다.
그런데 메소드를 구현시 인자값으로 C에서 char*처럼 문자열을 사용해야 하는데요
[in]char * 는 사용이 안되고 BSTR을 사용해야한다고 들었습니다. 그런데 문제가 좀 생겼습니다.
일반 적으로 char *를 사용하지 못한다면 c에서 지원되는 strcpy등과 같은 함수를 사용할때 문제가 생기는데요
그뿐만 아니라 다른사람이 만든 DLL파일에서 인자로 char *를 받게 되어있을경우 BSTR은 사용할수 없다는 점입니다.
BSTR에 대해 자료를 찾아 보려구 하지만 잘못찾겠습니다.
혹시 저랑 비슷한 경험을 하신분이나 ATL 에서 메소드 구현시 인자값으로 받을수 있는 문자열(BSTR등)을 char *로 형변환을 해주거나 다르게 char *로 외부에서 오는 문자열을 인자로 받을수 있는 방법이 없을까요
글이 두서가 없는것 같아 죄송합니다. 요지는 BSTR을 char *부분으로 바꿔주는 사항입니다.
마지막으로 ATL DLL을 컴파일시 자동으로 레지스트리에 등록이 되고 VC,ASP등에서 그 DLL을 로드하고 난 다음에 ATL DLL을 다시 컴파일하게 되면 DLL을 오픈할수 없다는 에러가 발생합니다.
어떤분은 Regsvr32 /u xxx.dll를 하라는 말씀을 듣고
1.Regsvr32 /u TestDllATL3.dll
2.Regsvr32 /u debug/TestDllATL3.dll
3.regsvr32 /u C:\VC6.0 project\ATL\9월8일 ATL DLL 테스트\TestDllATL3\DebugTestDllATL.dll
4. regsvr32 /u "C:\VC6.0 project\ATL\9월8일 ATL DLL 테스트\TestDllATL3\DebugTestDllATL.dll"
1~4번까지 모두 해봐도 안되네요..
VC,ASP에서 따로 로드한 DLL을 해제하고 해야하는건지 잘모르겠어서 질문드립니다.
BSTR을 변환할 수 있는 방법이 많습니다.
ATL에서 제공하는 OLE2T (OLE2A, OLE2W)등의 매크로를 이용하면 BSTR을 손쉽게 char / wchar 형태로 변환할 수 있습니다.
"BSTR 변환"으로 구글링 해보세요.
그리고 ASP에서 로드된 DLL을 다시 컴파일할 때 오류가 나는 건 IIS에서 해당 DLL을 로드하고 있어서가 아닐까 생각합니다.
정 안되면 IIS를 내린 후 컴파일 해보세요.
댓글 달기