COMException в System.WIndows.Forms.dll с интерактивным брокером TWS API - PullRequest
0 голосов
/ 12 мая 2010

Я пытался запустить пример проекта, поставляемый с руководством, на stockbotprogramming http://www.stockbotprogramming.com/sharpcibtutorial1.php, но я получаю COMException каждый раз, когда запускаю приложение.

У меня запущен TWS-клиент, и примеры проектов VB, предоставляемые с API, могут нормально подключаться, но когда я пытаюсь использовать образец C #, предоставленный в учебном пособии, я получаю следующее исключение:

Необработанное исключение типа 'System.Runtime.InteropServices.COMException' произошло в System.Windows.Forms.dll

Исключение возникает при попытке добавить элемент управления TWS ActiveX:

namespace CSharpTutorial1
{

    public partial class Form1 : Form
    {
        private AxTWSLib.AxTws tws;
        public Form1()
        {
            InitializeComponent();         
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            tws = new AxTWSLib.AxTws();
            tws.BeginInit();
            tws.Enabled = true;
            tws.Location = new System.Drawing.Point(32, 664);
            tws.Name = "tws";
            Controls.Add(tws); // <-- EXCEPTION HERE!
            tws.EndInit();
            tws.connect("127.0.0.1", 7496, 0);
            String msg = "Connected to TWS server version " + tws.serverVersion + "at " + tws.TwsConnectionTime;
            MessageBox.Show(msg);
        }
    }
}

Исходный проект, вероятно, был сделан с Visual Studio 2005, но у меня Visual Studio 2008, и он автоматически конвертировал проект (я читал, что там есть некоторые проблемы). Кто-нибудь знает, что может быть причиной этого исключения? Есть идеи как это исправить?

1 Ответ

2 голосов
/ 03 июня 2010
  1. Внимание! Убедитесь, что вы добавили компонент в IDE с помощью визуального дизайнера. Сначала щелкните правой кнопкой мыши на панели инструментов, нажмите «выбрать элементы», перейдите на вкладку COM, затем проверьте элемент управления TWS. Теперь с помощью визуальной IDE перетащите этот элемент на поверхность вашей формы. Это должно быть видно в вашем приложении. (Не создавайте его в Form1_Load())

  2. Сделайте что-то подобное ... (не используйте IP-адрес 127.0.0.1, оставьте это поле пустым):


axTws1.connect("", 7496, 0);
axTws1.reqMktData(0, "AMD", "STK", "", 0, "", "", "SMART", "ISLAND", "USD", "", 0);
  1. Последний (если вы используете 64-битную Windows) компилировать проект в 32-битном коде. Перейдите в диспетчер конфигурации, а затем создайте новый профиль "x86" и установите для всех конфигураций значение x86.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...