2014-01-22 85 views
3

我目前面臨着將任何種類的DLL添加到ColdFusion項目中的困境。我做了大量的研究,但似乎沒有足夠的簡單來理解。我有一個Winform在Reference中使用了相同的DLL,這使得生活變得簡單。在尋找將相同的DLL添加到ColdFusion項目時,它似乎不工作。我曾嘗試使用以下嘗試:將非.NET DLL添加到ColdFusion

<cfobject type="com" name="myObj" assembly="C:\DocViewer\AxInterop.SHDocVw.dll"> 

這是我收到和錯誤消息:

屬性驗證錯誤標籤CFOBJECT。它具有無效的 屬性組合:程序集,名稱,類型。

這個網站在過去一直很有幫助,我希望能夠學習如何在CF9中運行這個DLL,這樣我就不必完全重寫整個程序,而當前程序完美無缺。

從評論

我嘗試使用REGSVR32但這裏添加DLL現在是我的錯誤:

the module was loaded but the entry-point dllregisterserver was not found 
+2

我想你應該能夠在ColdFusion中使用已註冊的COM對象。你從代碼中得到了什麼錯誤信息?看看[COM對象的文檔](http://help.adobe.com/en_US/ColdFusion/9.0/CFMLRef/WSc3ff6d0ea77859461172e0811cbec22c24-714e.html),似乎你缺少必需的屬性(類),並有一個不受支持的屬性用於COM對象(程序集)。檢查包括的參考。 –

+1

另外 - 你使用32位還是64位CF? (COM不支持64位以下。)另外,dll究竟做了什麼? – Leigh

+0

您還需要在Windows中註冊dll。從命令行運行以註冊regsvr32 C:\ DocViewer \ AxInterop.SHDocVw.dll –

回答

0

那麼它看起來像你對我正在使用的該cfobject屬性。 NET對象而不是COM對象。 cfobject標籤是其中屬性因操作/類型而異的標籤之一,例如cfcontent,cffile和cfdirectory(以及其他一些不立即想到的)。

所以你需要訪問COM具體對象的文檔,Adobe的CFML引擎的最新版本,位置爲:https://wikidocs.adobe.com/wiki/display/coldfusionen/cfobject%3A+COM+object

有文檔頁面上有錯誤,但是看起來這應該爲你工作(雖然我承認它已經有一段時間,因爲我已經調用一個COM對象):

<cfobject 
    type = "com" 
    class = "path.to.com.Class" 
    name = "myObj" 
    action = "create|connect"> 

它看起來像你會使用action="connect"如果您有它安裝爲Windows服務,或創建如果你想CF來實例化這個DLL,但我猜想讓它作爲服務安裝會更容易。我只是猜測,但我認爲如果您使用這種方式,「path.to.com.Class」將是服務的名稱,或者如果CF服務器是通向.dll文件的邏輯路徑正在實例化它。如果這兩個選項都不起作用,那麼如果這些選項被移至較新的操作系統,或者該服務可能配置錯誤,則可能存在版本不兼容問題。

從註冊DLL的錯誤信息聽起來像(我猜是因爲我從來沒有創建一個Windows服務DLL)它正在尋找一個特定的類或函數在DLL中以註冊它作爲服務在Windows並且它無法在DLL中找到「入口點」(例如,與Java將查找「public static void Main(String args)」作爲Java程序的入口點的方式相同)。對於一個服務來說這可能是必要的,但對於可能以其他方式訪問和使用的通用DLL來說,這可能不是必需的,所以可能這個DLL可能工作,但不能與服務註冊兼容。

所以回到你的示例代碼,這可能工作:

<cfobject type="com" name="myObj" action="create" 
    class="C:\DocViewer\AxInterop.SHDocVw.dll"> 
+1

'class'應該是COM環境中的'ProgID',而不是dll的路徑。 – Henry

+0

我說我在猜測。我現在注意到文件已在評論中提及。我沒有閱讀他們,因爲我希望答案張貼在答案中,而不是評論中。 –

+1

_「我沒有閱讀它們,因爲...」 - 那麼你需要(a)調整你的期望,並(b)開始閱讀評論,因爲他們經常包含/請求澄清問題是與任何即將回答的人有關。 –