首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从C# -有什么方法来确定一个主权财富基金是AVM1还是AVM2?

从C# -有什么方法来确定一个主权财富基金是AVM1还是AVM2?
EN

Stack Overflow用户
提问于 2010-11-11 19:20:31
回答 2查看 499关注 0票数 3
  • swf 3.0提供了一种确定ActionScript是否适用于以下两种方法: 1) AVM2 (或更早);或2) AVM3。[link1link2]

我的问题是:

  • 来自C#,有什么方法可以确定swf是用于AVM1还是AVM2?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-11-11 20:01:55

好的。.swf规范可以在这里找到:v10.pdf

FileAttributes,第60页,ActionScript3 UB1。如果设置了此位,则为AVM2,否则为AVM1。这只能在版本9和更高版本的.swfs上使用,但是版本8或更低版本保证是AVM1。

快速到达那个位置的方法是:

代码语言:javascript
复制
// Bytes from start of file: Signature + Version + FileLength + FrameSize + FrameRate + FrameCount + FileAttributes Header 
3 + 1 + 4 + (ceil(((swf[8] >> 3) * 4 - 3) / 8) + 1) + 2 + 2 + 2

swf8是swf的第8个字节。读下一个字节,这是第5位。

如果文件被压缩(字节为0,FileLength 0x43),则可能必须在FileLength之后解压缩所有内容。swf是使用zlib压缩的,是Little Endian。

票数 6
EN

Stack Overflow用户

发布于 2010-11-11 19:24:09

ActionScript虚拟机2是ActionScript 3的虚拟机,AVM1是ActionScript 1和2的虚拟机,所以如果ActionScript版本是ACTIONSCRIPT2,则是AVM1,如果是ACTIONSCRIPT3,则是AVM2。

关于你的最新问题:

我不认为用C#直接读取这些信息是可能的。我想您希望在C#中包括一部SWF电影;这样基本上您就可以嵌入Flash并告诉它播放电影了。所以你和C#的电影没有直接的互动。也许可以联系Flash实例并获取信息,但我不知道有哪些信息可用(而且我认为这也取决于您如何嵌入它)。

不过,您可以使用Flash‘ExternalInterface作为通信点(我猜,您可以使用C#容器作为来自Flash的外部接口,就像您可以在网页上与JavaScript通信一样),只需“询问”电影本身它是什么版本。由于您可能正在使用一些第三方文件,您将无法访问它们的源代码,因此您可以编写一个包装器SWF来为您加载原始文件。

不管你是怎么做的,我想知道你为什么想要这些信息。当你在某个地方播放一部SWF电影时,你根本不在乎它在内部做什么。AVM版本只在与电影直接通信时起作用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4158377

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档