2013-04-18 34 views
0

我試圖從C#代碼中調用Javascript函數「eval」(以利用字符串來運算符分析器)。我用下面的代碼:在C#中調用64位項目的Javascript函數

Exception Details: System.Runtime.InteropServices.COMException: Retrieving the COM class factory for component with CLSID {0E59F1D5-1FBE-11D0-8FF2-00A0D10038BC} failed due to the following error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).

我相信這個問題是因爲項目/機是64位: https://stackoverflow.com/a/12431435/712700

它與下面的消息---雖然崩潰。我不想將項目更改爲32位,是否有另一個CLSID可用於使其與64位一起工作?或者還有另一種方法來在C#代碼中簡單地使用JavaScript中的「eval」函數嗎?

+0

你可以嘗試不同的嵌入式引擎中的文件? http://stackoverflow.com/questions/172753/embedding-javascript-engine-into-net-c – 2013-04-18 06:21:07

回答

1

你是指下面的代碼

Type scriptType = Type.GetTypeFromCLSID(Guid.Parse("0E59F1D5-1FBE-11D0-8FF2-00A0D10038BC")); 

dynamic obj = Activator.CreateInstance(scriptType, false); 
obj.Language = "javascript"; 

var res = obj.Eval("a=3; 2*a+32-Math.sin(6)"); 

以上CLSID實際上是爲ScriptControl的

從上面的2個鏈接你會看到這是VB6相關的,如果你想使用上面的代碼作爲你提到的問題,你將需要msscript.ocx。請檢查你是否有這個文件。您可能需要使用REGSVR32

我使用的是64位計算機正確註冊它,我看到下面的文件夾C:\Windows\SysWOW64

+0

謝謝你,我有你在同一個位置的文件。我在我的項目中引用它,並使用regsvr32註冊它,但不幸的是我仍然得到相同的錯誤。 – goamn 2013-04-18 07:46:39

+0

您需要x64版本,我不認爲它存在。 – Brain2000 2017-04-05 21:20:04