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
[7446] Re:regsvr32.exe를 쓰지 않고 코딩만으로 ocx를 설치하는 방법
박지훈.임프 [cbuilder] 3779 읽음    2001-09-23 03:22
임프랍니다.

물론 말씀하신대로 regsvr32.exe 실행파일을 현재 프로젝트에 집어넣을 수도 있습니다.
RC_DATA 포맷 리소스로 집어넣고 런타임에서 리소스로부터 읽어들여서 파일로 내보낸 후 실행하면 되겠지요.

하지만 ocx를 설치하기 위해서 그렇게 할 필요는 없습니다.
실제로, 델파이나 빌더도 ocx 설치를 위해 regsvr32.exe를 호출하진 않습니다.
regsvr32.exe가 아주 대단한 일을 하는 것은 아니므로, regsvr32.exe와 똑같이 해주기만 하면 되겠지요?

사실 내부적으로 보면, regsvr32.exe가 ocx를 설치시키는 것이 아니라, regsvr32.exe는 단순히 ocx내의
DllRegisterServer 함수(언인스톨시엔 DllUnregisterServer)를 실행해주고, 이 함수가 스스로 설치하는
것입니다. 그러므로 이넘만 실행해주면 인스톨이 됩니다.

다음은 간단히 작성해본 함수입니다.
이 함수의 첫 인자로는 ocx의 전체 경로, 두번째 인자로 인스톨할 것인지 혹은 언인스톨할 것인지를 불린
형으로 넘겨주면 됩니다. 성공한 경우에는 true, 실패시엔 false가 리턴됩니다.
(인스톨과 언인스톨용으로 두개의 함수를 만드는 게 귀찮아서 하나의 함수에 불린값으로 넘겨주도록 했습니다.)

function RegisterOcx(OcxPath: string; bRegister: boolean): boolean;
type
  TDllProc = function: HResult; stdcall;
var
  hModule: THandle;
  DllProc: TDllProc;
begin
  result := false;
  hModule := LoadLibrary(PChar(OcxPath));
  if hModule=0 then exit;

  if bRegister then @DllProc := GetProcAddress(hModule, 'DllRegisterServer')
  else              @DllProc := GetProcAddress(hModule, 'DllUnregisterServer');
  if @DllProc=nil then exit;

  result := DllProc=S_OK;
  FreeLibrary(hModule);
end;

그럼 이만...


ravee 님이 쓰신 글 :
: 저는 ocx파일을  레지스트리에 값을 넣고 싶습니다.
: 그런데 regsvr32.exe를 프로그램 코팅에 넣어서 사용하고 싶은데
: 방법이 없을 까요. 고수님들의 고견을 여쭙니다.
:
: 가령 ocx파일의 이름은 aaa.ocx 파일이라 가정한다면 어떻게 되는지
:

+ -

관련 글 리스트
7445 <질문>regsvr32 를 코딩으로 해서 ocx파일을 레지스트리에 넣는 방법 ravee 1622 2001-09-23
7446     Re:regsvr32.exe를 쓰지 않고 코딩만으로 ocx를 설치하는 방법 박지훈.임프 3779 2001-09-23
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.