﻿<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type='text/css' href='https://stocksharp.com/css/style.css'?>
<?xml-stylesheet type='text/css' href='https://stocksharp.com/css/bbeditor.css'?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title type="html">Возникновение ошибки PInvoke при подключении к PLAZA2</title>
  <id>~/topic/4161/vozniknovenie-oshibki-pinvoke-pri-podklyuchenii-k-plaza2/</id>
  <rights type="text">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  <updated>2026-04-12T02:36:08Z</updated>
  <logo>https://stocksharp.com/images/logo.png</logo>
  <link href="https://stocksharp.com/handlers/atom.ashx?category=topic&amp;id=4161" rel="self" type="application/rss+xml" />
  <entry>
    <id>https://stocksharp.com/posts/m/28331/</id>
    <title type="text">Нет, плазовский пример полностью рабочий. Равно как и другая страта на плазе с таким же PlazaTrader....</title>
    <published>2013-11-20T13:44:00Z</published>
    <updated>2013-11-20T13:45:53Z</updated>
    <author>
      <name>Mikhail Sukhov</name>
      <uri>https://stocksharp.com/users/201/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;alazbil &lt;a href="https://stocksharp.com/posts/m/28330/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;Нет, плазовский пример полностью рабочий. Равно как и другая страта на плазе с таким же PlazaTrader.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Ну тогда видимо что-то в вашем примере. Посмотрите свойства проекта (FW нужной версии, битность правильная). Посмотрите насчет потоков. Может у вас еще какие компоненты на COM используются... Вообщем, найти причину через форум практически анрил.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/28330/</id>
    <title type="text">Нет, плазовский пример полностью рабочий. Равно как и другая страта на плазе с таким же PlazaTrader.</title>
    <published>2013-11-20T13:12:39Z</published>
    <updated>2013-11-20T13:13:24Z</updated>
    <author>
      <name>alazbil</name>
      <uri>https://stocksharp.com/users/50156/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">Нет, плазовский пример полностью рабочий. Равно как и другая страта на плазе с таким же PlazaTrader.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/28328/</id>
    <title type="text">А пример SamplePlaza такую же ошибку выдает?</title>
    <published>2013-11-20T11:45:16Z</published>
    <updated>2013-11-20T11:45:16Z</updated>
    <author>
      <name>Mikhail Sukhov</name>
      <uri>https://stocksharp.com/users/201/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">А пример SamplePlaza такую же ошибку выдает?</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/28323/</id>
    <title type="text">При попытке запустить простенькое приложение на тестовой плазе, замеряющее раундтрипы, возникает сле...</title>
    <published>2013-11-19T16:24:54Z</published>
    <updated>2013-11-19T16:24:54Z</updated>
    <author>
      <name>alazbil</name>
      <uri>https://stocksharp.com/users/50156/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">При попытке запустить простенькое приложение на тестовой плазе, замеряющее раундтрипы, возникает следующая ошибка:&lt;br /&gt;&lt;br /&gt;Fatal Execution Engine Error&lt;br /&gt;В среде выполнения обнаружена критическая ошибка. Ошибка произошла по адресу 0x62f730c8 в потоке 0x2154. Код ошибки 0xc0000005. Она может быть вызвана ошибкой в CLR или в небезопасных либо не поддающихся проверке фрагментах пользовательского кода. Обычно источниками таких ошибок бывают ошибки упаковки, допускаемые пользователями при COM-взаимодействии, либо PInvoke, повредивший стек.&lt;br /&gt;&lt;br /&gt;Это же приложение работает при подключении к квику, а также другое приложение на PLAZA2 работает с точно таким же PlazaTrader&amp;#39;ом. Помогите, пожалуйста, разобраться, что это такое. Падение происходит на trader.Connect().&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class='spoilertitle'&gt;&lt;input type='button' value='Show spoiler' class='btn btn-primary' onclick="toggleSpoiler(this, 'spolier_f5708af5635a45d7ba34ef6fe77d3d1a');" title='Show spoiler' /&gt;&lt;/div&gt;&lt;div class='spoilerbox' id='spolier_f5708af5635a45d7ba34ef6fe77d3d1a' style='display:none'&gt;&lt;br /&gt;Вот сам код приложения:&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Mime;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using Ecng.Collections;
using Ecng.Common;
using StockSharp.BusinessEntities;
using StockSharp.Logging;
using StockSharp.Algo;
using StockSharp.Plaza;
using StockSharp.Quik;
using StockSharp.Algo.Strategies;


namespace SpeedTestConsole //Код со всеми комментариями, которые мы в последний раз оставили.
{
    public delegate void ExitHandler();

    internal class Program
    {
        public static RoundStrategy strat;
        public static PlazaTrader trader    
                         = new PlazaTrader
                        {
                            Address = &amp;quot;127.0.0.1:4001&amp;quot;.To&amp;lt;IPEndPoint&amp;gt;(),
                            UseLocalProtocol = true,
                            IsCGate = true,
                            PollTimeOut = TimeSpan.FromMilliseconds(0.1),
                            Login = string.Empty,
						    Password = string.Empty,
                            AppName=&amp;quot;SS_1&amp;quot;
                        };

        private static void Main()
        {
            Security security = null;
            Portfolio portfolio = null;            
            trader.Connected += trader.StartExport;
            trader.NewSecurities += securities =&amp;gt;
                {
                    if (security != null)
                        return;


                    foreach (var s in securities.Where(s =&amp;gt; s.Id == &amp;quot;RIZ3@RTS&amp;quot;)) //&amp;quot;SBER@QJSIM&amp;quot;))
                    {
                        Console.WriteLine(&amp;quot;Инструмент загружен: &amp;quot; + s);
                        security = s;
                        trader.RegisterMarketDepth(security);
                    }
                };
            trader.NewPortfolios += portfolios =&amp;gt;
                {
                    if (portfolio != null)
                        return;

                    foreach (var p in portfolios.Where(p =&amp;gt; p.Name == &amp;quot;FZ00A56&amp;quot;))//&amp;quot;64597&amp;quot;))
                    {
                        Console.WriteLine(&amp;quot;Портфель загружен: &amp;quot; + p);
                        portfolio = p;
                    }
                };
            trader.OrdersCancelFailed += fails =&amp;gt;
                {
                    foreach (var orderFail in fails)
                        Console.WriteLine(orderFail.Error.Message);
                };
            trader.OrdersRegisterFailed += fails =&amp;gt;
                {
                    foreach (var orderFail in fails)
                        Console.WriteLine(orderFail.Error.Message);
                };
            trader.ConnectionError += exception =&amp;gt;
                {
                    Console.WriteLine(exception.Message);
                    Console.ReadLine();
                };
            trader.Connect();
            Console.WriteLine(&amp;quot;Дождитесь, когда загрузятся инструмент и портфель, затем начните тестирование.&amp;quot;);
            Console.ReadLine();
            strat = new RoundStrategy
                {
                    Trader = trader,
                    Portfolio = portfolio,
                    Security = security
                };
            strat._exit += Exit;
            strat.Start();            
            Thread.Sleep(15000);
        }

        public static void Exit()
        {
            Console.WriteLine(&amp;quot;Отправка заявок завершена.&amp;quot;);
            strat.Stop();
            trader.StopExport();
            trader.Dispose();
            Console.Read();
        }
    }

    public class RoundStrategy:Strategy
    {

        public event ExitHandler _exit;

            public void OrderMaking(int i)
            {
                if (i &amp;gt;= 5)
                {
                    if (_exit != null)
                        _exit();
                    return;
                }
                var market = Trader.GetMarketDepth(Security);
                var o = new Order
                {
                    Price = Security.ShrinkPrice(market.BestBid.Price * (1 - 0.01M)),
                    Direction = OrderDirections.Buy,
                    Volume = 1,
                    Security = Security,
                    Portfolio = Portfolio,
                    Trader = Trader,
                };

                Rule(o,i);
               
                RegisterOrder(o);
            }
            protected override void OnStarted()
            {
              OrderMaking(0);
            }

            public void Rule(Order order, int i)
            {
                order
                    .WhenRegistered()
                    .Do(() =&amp;gt;
                        {
                            Console.WriteLine(&amp;quot;Время постановки = {0}&amp;quot;, order.LatencyRegistration.TotalMilliseconds);
                            CancelOrder(order);
                        })
                       .Once()
                       .Apply(this);
                order.WhenCanceled()
                     .Do(() =&amp;gt;
                         {
                             Console.WriteLine(&amp;quot;Время снятия = {0}&amp;quot;, order.LatencyCancellation.TotalMilliseconds);
                             OrderMaking(i+1);
                         }).Once()
                     .Apply(this);
            }
        }
    
}
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
</feed>