2014-07-04 3 views
1

Я столкнулся со следующим исключением, пытаясь сделать связь между C# и флеш-объектом (swf). Я пытаюсь сфокусировать Flash64_13_0_0_214.ocx, чтобы сгенерировать 2 сборки AxShockwaveFlash.dll и ShockwaveFlashObject.dll, а затем проверить свой код в одном консольном приложении. Мой код, как правило, так:AxShockwaveFlash's LoadMovie throw System.AccessViolationException exception

AxShockwaveFlash player = new AxShockwaveFlash(); 
player.CreateControl(); 
player.WMode = "transparent"; 
player.AllowScriptAccess = "sameDomain"; 
player.Loop = false; 
player.LoadMovie(0, @"encrypt.swf"); 

После попадания LoadMovie, я получил следующее сообщение об ошибке:

System.AccessViolationException was unhandled HResult=-2147467261 Message=Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
Source=ShockwaveFlashObjects StackTrace: at ShockwaveFlashObjects.IShockwaveFlash.LoadMovie(Int32 layer, String url) at AxShockwaveFlashObjects.AxShockwaveFlash.LoadMovie(Int32 layer, String url) in c:\Windows\System32\AxShockwaveFlashObjects.cs:line 685 at TestActionScript2.Program.Main(String[] args) in c:\Something\trunk\Src\TestActionScript2\Program.cs:line 41 at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args) at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Threading.ThreadHelper.ThreadStart()

Пожалуйста помочь мне ~~

ответ

0

Hy, я получил те же проблемы, и я узнал, что эта ошибка возникает только в том случае, если вы вызываете LoadMovie beffore, когда форма загружается. Исправлено было добавить событие на загрузку формы и поместить код для создания shockwaveflash.

В вашем случае:

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 

     this.Load += new System.EventHandler(this.Form_Load); 
    } 

    private void Form_Load(object sender, EventArgs e) 
    { 
     AxShockwaveFlash player = new AxShockwaveFlash(); 
     player.CreateControl(); 
     player.WMode = "transparent"; 
     player.AllowScriptAccess = "sameDomain"; 
     player.Loop = false; 
     player.LoadMovie(0, @"encrypt.swf"); 
    } 
}