原文鏈接:http://www.cnblogs.com/xhan/archive/2010/10/22/1857992.html
前言:
本來在搞一個Google翻譯的接口--向Google翻譯發送請求--返回翻譯數據...
結果發現發送請求中的一個參數(tk)是需要驗證的,驗證不通過,報403錯誤...
網上搜到一個可以自己生成tk值的方法,不過是js寫的...省事的想將js代碼直接拿來用...
就看到了博客中的一個例子...
0--
function b(a, b) { for (var d = 0; d < b.length - 2; d += 3) { var c = b.charAt(d + 2), c = "a" <= c ? c.charCodeAt(0) - 87 : Number(c), c = "+" == b.charAt(d + 1) ? a >>> c : a << c; a = "+" == b.charAt(d) ? a + c & 4294967295 : a ^ c } return a } function tk(a,TKK) { for (var e = TKK.split("."), h = Number(e[0]) || 0, g = [], d = 0, f = 0; f < a.length; f++) { var c = a.charCodeAt(f); 128 > c ? g[d++] = c : (2048 > c ? g[d++] = c >> 6 | 192 : (55296 == (c & 64512) && f + 1 < a.length && 56320 == (a.charCodeAt(f + 1) & 64512) ? (c = 65536 + ((c & 1023) << 10) + (a.charCodeAt(++f) & 1023), g[d++] = c >> 18 | 240, g[d++] = c >> 12 & 63 | 128) : g[d++] = c >> 12 | 224, g[d++] = c >> 6 & 63 | 128), g[d++] = c & 63 | 128) } a = h; for (d = 0; d < g.length; d++) a += g[d], a = b(a, "+-a^+6"); a = b(a, "+-3^+b+-f"); a ^= Number(e[1]) || 0; 0 > a && (a = (a & 2147483647) + 2147483648); a %= 1E6; return a.toString() + "." + (a ^ h) }
打開vs命令行 運行 "jsc /t:library C:\common.js"
生成報錯···JS1234:在庫的內部只允許類型和包定義
更正此錯誤
-
確保該代碼只包含類、接口和包。
1--在最外面一層添加class..
class jsCommon{ function b(a, b) { for (var d = 0; d < b.length - 2; d += 3) { var c = b.charAt(d + 2), c = "a" <= c ? c.charCodeAt(0) - 87 : Number(c), c = "+" == b.charAt(d + 1) ? a >>> c : a << c; a = "+" == b.charAt(d) ? a + c & 4294967295 : a ^ c } return a } function tk(a,TKK) { for (var e = TKK.split("."), h = Number(e[0]) || 0, g = [], d = 0, f = 0; f < a.length; f++) { var c = a.charCodeAt(f); 128 > c ? g[d++] = c : (2048 > c ? g[d++] = c >> 6 | 192 : (55296 == (c & 64512) && f + 1 < a.length && 56320 == (a.charCodeAt(f + 1) & 64512) ? (c = 65536 + ((c & 1023) << 10) + (a.charCodeAt(++f) & 1023), g[d++] = c >> 18 | 240, g[d++] = c >> 12 & 63 | 128) : g[d++] = c >> 12 | 224, g[d++] = c >> 6 & 63 | 128), g[d++] = c & 63 | 128) } a = h; for (d = 0; d < g.length; d++) a += g[d], a = b(a, "+-a^+6"); a = b(a, "+-3^+b+-f"); a ^= Number(e[1]) || 0; 0 > a && (a = (a & 2147483647) + 2147483648); a %= 1E6; return a.toString() + "." + (a ^ h) } }
打開vs命令行 運行 "jsc /t:library C:\common.js"
成功生成...???
3--尷尬-生成到哪里了···
最后研究下jsc的一些文檔吧···找到一份說明:http://www.planabc.net/2011/06/04/use_jscript_to_create_windows_apps_and_libraries/
jsc [選項] <源文件> [[選項] <源文件>…] JScript 編譯器選項 – 輸出文件 – /out:<file> 指定二進制輸出文件的名稱 /t[arget]:exe 創建控制台應用程序(默認) /t[arget]:winexe 創建 Windows 應用程序 /t[arget]:library 創建庫程序集 /platform:<platform> 限制此代碼可以在其上運行的平台;必須是 x86、Itanium、x64 或 anycpu。默認為 anycpu – 輸入文件 – /autoref[+|-] 基於導入的命名空間和完全限定名稱自動引用程序集(默認情 況下為 on) /lib:<path> 指定要在其中搜索引用的附加目錄 /r[eference]:<file list> 從指定的程序集文件引用元數據 <file list>: <assembly name>[;<assembly name>…] – 資源 – /win32res:<file> 指定 Win32 資源文件(.res) /res[ource]:<info> 嵌入指定的資源 <info>: <filename>[,<name>[,public|private]] /linkres[ource]:<info> 將指定的資源鏈接到此程序集 <info>: <filename>[,<name>[,public|private]] – 代碼生成 – /debug[+|-] 發出調試信息 /fast[+|-] 禁用語言功能以使代碼更好地生成 /warnaserror[+|-] 將警告視為錯誤 /w[arn]:<level> 設置警告等級(0-4) – 雜項 – @<filename> 有關更多選項,請閱讀響應文件 /? 顯示幫助 /help 顯示幫助 /d[efine]:<symbols> 定義條件編譯符號 /nologo 不顯示編譯器版權標志 /print[+|-] 提供 print() 函數 – 高級 – /codepage:<id> 使用指定的代碼頁 ID 打開源文件 /lcid:<id> 將指定的 LCID 用於消息和默認代碼頁 /nostdlib[+|-] 不導入標准庫(mscorlib.dll)並將 autoref 默認值更改為 off /utf8output[+|-] 以 UTF-8 字符編碼形式發出編譯器輸出 /versionsafe[+|-] 為沒有標記為“override”或“hide”的成員指定默認值
打開vs命令行 運行 "jsc /t:library /out:d:\common.dll C:\common.js"
生成生成!!!
3.在c#項目中引用common.dll 和Micosoft.JScript.dll
4.
xx x = new xx();
xx....
over。。。
???
果然還是報錯...
仔細又看了一遍:http://www.planabc.net/2011/06/04/use_jscript_to_create_windows_apps_and_libraries/
package LibHW { class jsCommon{ function b(a, b) { for (var d = 0; d < b.length - 2; d += 3) { var c = b.charAt(d + 2), c = "a" <= c ? c.charCodeAt(0) - 87 : Number(c), c = "+" == b.charAt(d + 1) ? a >>> c : a << c; a = "+" == b.charAt(d) ? a + c & 4294967295 : a ^ c } return a } function tk(a,TKK) { for (var e = TKK.split("."), h = Number(e[0]) || 0, g = [], d = 0, f = 0; f < a.length; f++) { var c = a.charCodeAt(f); 128 > c ? g[d++] = c : (2048 > c ? g[d++] = c >> 6 | 192 : (55296 == (c & 64512) && f + 1 < a.length && 56320 == (a.charCodeAt(f + 1) & 64512) ? (c = 65536 + ((c & 1023) << 10) + (a.charCodeAt(++f) & 1023), g[d++] = c >> 18 | 240, g[d++] = c >> 12 & 63 | 128) : g[d++] = c >> 12 | 224, g[d++] = c >> 6 & 63 | 128), g[d++] = c & 63 | 128) } a = h; for (d = 0; d < g.length; d++) a += g[d], a = b(a, "+-a^+6"); a = b(a, "+-3^+b+-f"); a ^= Number(e[1]) || 0; 0 > a && (a = (a & 2147483647) + 2147483648); a %= 1E6; return a.toString() + "." + (a ^ h) } } }
這次外邊又加了一個"package"...
終於可以了···GG