我意识到这可能不是您问题的确切答案,但我想说一下我的看法,因为我怀疑很少有人尝试过这样做。
我通过使用混合模式C++创建了一个托管包装器。还有其他方法可以做到这一点,但我打算尝试制作一个完整的包装器,可从任何.NET语言中使用。
让库以这种方式编译,使其可以包含在混合模式项目中,有点具有挑战性。我必须修改运行时库(在SConstruct文件中)的用法,将其用于/MD和/MDd,以使其与/clr开关兼容。
到目前为止,我只运行了简单的脚本,因为我还没有实现回调、自定义方法、对象等。
以下是我一个测试应用程序的用法快速示例:
V8DotNet.Shell shell = new V8DotNet.Shell();
shell.ExecuteScript(@"print('V8 version is: ' + version());");
它可以很好地运行像base64编码器之类的复杂脚本。但目前我只能从c++端添加自定义项。
如果有人感兴趣,我愿意提供更多信息和代码,因为我可能永远不会再接着做这个项目了。但是,恐怕这太多的代码不能在这里发布,所以我们需要找到其他媒介,如google code或codePlex。
编辑:
好的,我已经上传了代码。我必须放置一个免责声明:该项目还处于非常早期的阶段,我最多只是一个C++业余爱好者,所以不要对它抱太大的希望。此外,该项目是在chrome发布后创建/完成的,因此包含的v8版本可能已经过时了。
话虽如此,这就是它:http://ryanscook.com/Files/V8-DotNet.zip(21.5 MB)
在软件包中,你会发现以下有趣的项目:
V8Net-Library\V8.Net\V8.Net.sln- 这是具有托管C++包装器 proj 和用于测试的 C# 控制台应用程序的解决方案。
Dependencies\V8- 这是我用来构建 V8 lib 的 V8 代码。
希望对你有所帮助!