在c#中运行js脚本(将js文件生成为.dll文件)

原文链接: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

 

posted @ 2016-09-20 17:51  zh89233  阅读(3729)  评论(1编辑  收藏  举报