![](/img/trans.png)
[英]Communication between Flash and C# Using ExternalInterface without TLF text
[英]C# and Flash communication
有没有办法让C#获取swf通过ExternaInterface公开的方法列表?
更新:
刚刚意识到我误读了你的问题,因为你正在寻找通过Flex ExternalInterface class
而不是Shockwave ActiveX control
本身定义的方法; 我将在下面保留我的原始答案,因为它可能仍然有助于通过C#一般使用SWF
。
关于ExternalInterface
我现在没有答案,但您可以查看Fun with C#和Flash Player 8 External API ,以了解如何通过C#首先使用此API。 (另一个有用的示例可能是在Python和C#应用程序中使用Flash 8的外部接口 。)
从我在前一篇文章中读到的内容来看,可能没有直接的解决方案,通过将精心设计的XML片段传递给CallFunction()
的调用约定有点古怪,但你原则上应该能够将Georges 解决方案转化为此(就像我一样)说,它可能不会很漂亮;)
祝好运!
如何通过COM互操作性从.NET访问SWF:
SWF
for Windows是通过Adobe Flash Player ActiveX控件实现的 ,因此您可以通过COM互操作性从.NET中使用它。
您可以在Adobes网站上找到关于此的(遗留)文章/示例,请参阅在C#应用程序中嵌入Macromedia Flash Player以显示库存信息以获取概述(请注意有关示例代码不可用的文章的介绍性说明),但见下文。
更具体地说,您可以在本文的另一页上找到实现目标所需的初始步骤,请参阅在C#Windows应用程序中嵌入和与Macromedia Flash Player通信 - 特别是请按照文章/步骤进行操作在Visual Studio .NET中提供Macromedia Flash Player ActiveX控件 。
完成概述步骤以将Shockwave ActiveX control
添加到工具箱和特定项目引用后,您只需双击此引用(在Visual Studio 2008中名为ShockwaveFlashObjects
),这将打开Visual Studio对象浏览器,突出显示assembly Interop.ShockwaveFlashObjects
; 然后向下导航到namespace ShockwaveFlashObjects
,您可以在其中找到interface IShockwaveFlash
,公开(取决于您的视图过滤器)其所有成员,包括所需的外部方法及其各自的C#签名 。
如果你可以访问你的swf(有源代码),那么你需要做的就是向一个函数添加一个回调函数,该函数返回你设置的所有方法,以便将ExternalInterface用作数组,字符串等。
如果您无法访问swf源,可以创建另一个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========================');
}
}
}
这将适用于:
如果您无法访问swf或开发人员,则某些道德反编译可能会有所帮助。
另一种方法是使用其他开发人员开发的类来检查swfs。 这里有些例子:
这些类可能无法提供您需要的确切功能,但它是您需要的良好起点,只有您将使用二进制数据(我现在不是很擅长)。 您可以在此处找到SWF文件规范。
希望这可以帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.