2014-03-01 3 views
0

현재 Delphi에서 작은 보안 응용 프로그램을 개발 중입니다. Windows XP 이상의 OS-s에 설치되고 거의 완료되었지만, 여는 동안 MS Office 파일을 검사하는 기능을 구현하고 싶습니다. 이를 위해 IOfficeAntiVirus 인터페이스를 사용할 계획입니다. Serge Perevoznyk (http://www.delphi-central.com/MS_Office_AV_API.aspx)의 기사를 기반으로 인터페이스의 스캔 방법을 사용하여 실현하려고합니다.Delphi에서 IOfficeAntiVirus 인터페이스 사용

원래 버전의 Windows 및 Office 버전에서 시도했지만 원본 파일을 열 때 메시지 상자가 표시되지만 실제로는 표시되지 않습니다. 이 솔루션을 MSDN의 정보와 비교했습니다. 그것은 옳은 것처럼 보였다. 나는 내가 놓친 Windows 레지스트리에 몇 가지 추가 설정이 있어야한다고 생각합니다. 아무도 나에게 해결책을 찾을 곳을 알려 줄 수 있습니까?

답변

1

IOfficeAntiVirus을 사용하는 경우 입니다.

구현 클래스가 Scan() 메서드를 구현하는 새 ActiveX 컨트롤이 포함 된 새 ActiveX 라이브러리를 만들어야합니다. 컨트롤의 등록 코드에서 범주를 사용하여 컨트롤을 등록하려면 ICatRegister을 사용해야합니다. 이렇게하면 Office/IE에서 ActiveX 컨트롤을 찾을 수 있으므로 ActiveX 컨트롤을 인스턴스화하고 Scan() 구현을 호출 할 수 있습니다. Serge의 기사 후반부에는 어떻게하면되는지 보여줍니다 (Serge의 예는 PChar을 입력으로 표시하지만 실제로는 TMsoavinfo^이됩니다.) PChar을 사용하여 TMsoavinfo을 전달하지 마십시오.

그러면 Windows의 명령 줄 regsvr32.exe app을 사용하여 결과 DLL을 등록해야합니다.

Office/IE에서 Scan() 구현을 호출하지 않는 경우 32 비트/64 비트 및/또는 UAC 문제를 고려하지 않은 것처럼 ActiveX 컨트롤을 올바르게 등록하지 않았을 수 있습니다.

0

누구든지 관심이있는 경우를 위해서입니다. Remy의 대답은 정확하지만 위에서 언급 한 예제 프로젝트의 초기화 섹션에는 작은 버그가 있습니다.

대신

TComObjectFactory.Create (에 ComServer, TMsoTest, Class_MsoTest, 'MsoTest' ''ciMultiInstance, tmApartment)의;

올바른 명령은 다음

TMSOAVFactory.Create (에 ComServer, TMsoTest, Class_MsoTest, 'MsoTest' ''ciMultiInstance, tmApartment);