이전 질문과 다른 내용의 질문이네요. 다음부터는 별도로 질문을 올려주세요.
먼저 오해의 가능성이 있는 용어 정리부터... 엄밀하게 말해 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가 있나요?
: 그럼 안녕히...
:
|