Delphi Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
델파이 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
FreePascal/Lazarus
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
델마당
볼랜드포럼 광고 모집

델파이 Q&A
Delphi Programming Q&A
[10640] Re:Re:Re:OCX가 등록되어있는지 알아보려면
박지훈.임프 [cbuilder] 4964 읽음    2006-04-04 21:12
이전 질문과 다른 내용의 질문이네요. 다음부터는 별도로 질문을 올려주세요.

먼저 오해의 가능성이 있는 용어 정리부터... 엄밀하게 말해 OCX가 등록되는 것이 아니라 COM 서버가 등록되는 것입니다.
COM 서버에는 OCX 외에도 DLL, EXE도 있습니다. 다만, DLL, EXE는 일반 dll, exe처럼 COM 서버가 아닌 경우도 있죠.

COM서버가 등록되어 있는지를 확인하려면 파일 이름으로는 안됩니다.
레지스트리에 파일 이름으로 구분하여 등록되지 않기 때문입니다. ClassID나 ProgID 두가지 중 하나를 알아야 합니다.
스스로 만든 COM 서버라면 당연히 알고 있는 상태겠죠.

ClassID를 알고 있다면 ClassIDToProgID() 함수를,  ProgID를 알고 있다면 ProgIDToClassID() 함수를 씁니다.
이 두 함수는 ClassID와 ProgID를 서로 바꿔주는 함수들인데, 해당 COM 서버가 등록되어 있을 경우에만 제대로 동작하고
등록되어 있지 않은 경우에는 EOleSysError 예외가 발생합니다.

따라서 다음과 같이 하면 됩니다.

// ClassID로 알아볼 경우
try
  ClassIDToProgID(StringToGUID('{D27CDB6E-AE6D-11CF-96B8-444553540000}'));
  ShowMessage('플래시8이 설치되어 있네요.');
except
  ShowMessage('플래시8이 설치가 안되어 있는디요.');
end;

// ProgID로 알아볼 경우
try
  ProgIDToClassID('ShockwaveFlash.ShockwaveFlash.11');
  ShowMessage('플래시8이 설치되어 있네요.');
except
  ShowMessage('플래시8이 설치가 안되어 있는디요.');
end;

그럼...


델짱 님이 쓰신 글 :
: 답변 감사합니다~
: 한가지 더 질문 있슴다. ^^;
: OCX가 등록되이 있는지 알아낼수 있는 API가 있나요?
: 그럼 안녕히...
:

+ -

관련 글 리스트
10631 win 어플에서 OCX 등록을 웹에서 처럼 등록 가능할까요?.. 델짱 1736 2006/04/03
10632     Re:win 어플에서 OCX 등록을 웹에서 처럼 등록 가능할까요?.. 박지훈.임프 1811 2006/04/03
10637         Re:Re:win 어플에서 OCX 등록을 웹에서 처럼 등록 가능할까요?.. 델짱 1660 2006/04/04
10640             Re:Re:Re:OCX가 등록되어있는지 알아보려면 박지훈.임프 4964 2006/04/04
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.