2014-03-01 55 views
0

目前我正在Delphi中開發一個小型安全應用程序。它打算安裝在Windows XP和更高版本的操作系統中,幾乎已經完成,但是我希望實施該功能以在打開時掃描MS Office文件。爲此,我計劃使用IOfficeAntiVirus接口。我正在嘗試使用基於Serge Perevoznyk撰寫的文章(http://www.delphi-central.com/MS_Office_AV_API.aspx)的界面掃描方法。在Delphi中使用IOfficeAntiVirus接口

原始示例應該在文件打開時顯示消息框,但它不會,儘管我在不同版本的Windows和Office上嘗試過它。我將此解決方案與MSDN上的信息進行了比較。這似乎是正確的。我想在Windows註冊表中應該有一些額外的設置,我錯過了。任何人都可以給我一些提示,我應該在哪裏尋找解決方案?

回答

1

你不要使用IOfficeAntiVirus,你實施它。

您需要創建一個新的ActiveX庫,其中包含一個新的ActiveX控件,其實現類實現了Scan()方法。在控件的註冊碼中,您必須使用ICatRegister將您的控件註冊爲使用CATID_MSOfficeAntiVirus類別。這樣,Office/IE可以找到您的ActiveX控件,以便它可以實例化並調用其實現。 Serge的文章的後半部分向你展示瞭如何做到這一點(Serge的例子顯示Scan()PChar作爲輸入,但它實際上需要TMsoavinfo^,而不是通過TMsoavinfo使用PChar)。

然後您必須使用Windows的命令行regsvr32.exe應用程序註冊得到的DLL。

如果Office/IE未調用您的Scan()實現,那麼您很可能沒有正確註冊您的ActiveX控件,例如,如果您沒有考慮32位/ 64位和/或UAC問題。

0

僅供參考,如果有人有興趣。 Remy的回答是正確的,但是上述示例項目的初始化部分存在一個小錯誤。

代替

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

正確的命令是:

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