有没有办法为C#得到的SWF通过ExternaInterface公开的方法列表?
Answer 1:
更新:
只是意识到我误读为你正在寻找通过Flex的定义方法,你的问题ExternalInterface class
,而不是那些的Shockwave ActiveX control
本身; 我要保持我的下面,因为它可能仍然是有用的关于原来的答案SWF
通过C#的使用一般。
关于ExternalInterface
我不知道答案的权利,但你可能会考虑乐趣与C#和Flash Player 8外部API ,以获取有关如何在第一时间通过C#使用这个API的想法。 (另一个有用的样本可能是Flash 8中的Python和C#应用程序使用外部接口 )。
从什么我读了前文中有可能没有直接的解决方案,并通过经过精雕细琢的调用约定XML片段到CallFunction()
是有点奇特,但你仍应该能够翻译乔治的解决方案 ,原则上这个(我说,它很可能不会是漂亮;)
祝好运!
如何通过COM互操作从.NET访问SWF:
SWF
的Windows通过的方式实现的Adobe Flash Player ActiveX控件 ,因此你将通过使用它从.NET COM互操作性 。
你可以找到一个(传统)文/样品与本上Adobe的网站,看到嵌入的Macromedia Flash Player在C#应用程序来显示股票信息的概述(请注意按语关于样本代码的可用性的文章),但见下文。
更具体地讲 ,你可以找到你需要采取以达到这篇文章的另一页上你的目标,看到初始步骤嵌入,并与Macromedia Flash播放器在C#中的Windows应用程序通信 -特别请按照文章/步骤直至并包括部分使Macromedia Flash Player的ActiveX控件可用在Visual Studio .NET中 。
一旦你完成了概述步骤将添加Shockwave ActiveX control
到您的工具箱和一个特定的项目引用您可以简单地双击这个参考(名为ShockwaveFlashObjects
在Visual Studio 2008),这将打开Visual Studio的对象浏览器突出assembly Interop.ShockwaveFlashObjects
; 然后导航下入namespace ShockwaveFlashObjects
,在那里你会发现,除其他外,在interface IShockwaveFlash
,露出(取决于您的视图过滤器)的所有成员,包括各自的C#签名所需的外部方法 。
Answer 2:
如果您可以访问您的SWF(有源的话),那么所有你需要做的就是添加一个回调到返回函数的所有你已经与ExternalInterface的使用设置为一个数组,字符串等方法
如果您没有访问SWF源,你可以再拍瑞士法郎,与ExternalInterface的设定,让你可以调用它。 将原件SWF在您的新的,并在INIT处理程序,启动scavanging对于可能被称为连接使用,以ExternalInterface.addCallback方法的describeType 。
这是我的想法:
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.INIT, loaded);
loader.load(new URLRequest('externalInterfaceTest.swf'));
function loaded(e:Event):void{
//get all the methods in the loaded swf
var methods:XMLList = describeType(e.target.content).method;
for each(var method:XML in methods){
//get methods defined by the author/not belonging to flash.display.*,flash.events.*,etc
if(method.@declaredBy.indexOf('flash') == -1){
trace('\nmethod description start========================');
trace('methodName: ' + method.@name);
trace('returnType: ' + method.@returnType);
for each(var param:XML in method.parameter){
trace('parameter ' + param.@index + ' type: ' + param.@type + ' optional: ' + param.@optional);
}
trace('\nmethod description end\n========================');
}
}
}
这将工作,如果:
- 加载不具有的DocumentClass瑞士法郎,可能被添加的回调函数是在时间轴上,因此公众
- 您加载SWF有ExternalInterface.addCallback联的所有方法声明为public
如果你有到SWF或开发商没有进入,一些道德反编译可能会有帮助。
一种不同的方法是使用由其他开发商来检查主权财富基金发展类。 这里有些例子:
- senocular的SWFReader
- 蒂博因贝特的SWFExplorer
- 丹尼斯Kolyako的getDefinitionNames
这些类可能无法提供你所需要的确切功能,但它是一个很好的起点,你需要什么,只有你会使用二进制数据(我不是很擅长现在)寻找。 你可以找到SWF文件规范在这里 。
希望这可以帮助。
Answer 3:
你必须从C#代码读取SWF文件要做到这一点 - 不以任何真正意义上的与它通信。 这篇文章将指向您在正确的方向,但也有可能会是相当多的工作要做。 (您将需要反编译字节码,看获得通过什么功能ExternalInterface.addCallback
。)
ActionScript的字节码格式文件 ,因为是SWF格式 。