使用Interactive Brokers TWS API的System.WIndows.Forms.dll中的COMException

时间:2010-05-12 00:08:16

标签: c# exception com controls activex

我一直在尝试运行stockbotprogramming http://www.stockbotprogramming.com/sharpcibtutorial1.php教程提供的示例项目,但每次运行应用程序时都会遇到COMException。

我运行了TWS客户端,随API提供的示例VB项目能够很好地连接,但是当我尝试使用本教程提供的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 个答案:

答案 0 :(得分:2)

  1. 重要说明:确保使用可视化设计器将组件添加到IDE。首先右键单击工具箱,单击“选择项目”,单击COM选项卡,然后检查TWS控件。现在使用可视IDE将此项目拖动到表单的表面。它必须在您的应用中可见。 (不要在Form1_Load()

  2. 中创建它
  3. 做这样的事情......(不要使用127.0.0.1的IP地址,留空):


  4. axTws1.connect("", 7496, 0);
    axTws1.reqMktData(0, "AMD", "STK", "", 0, "", "", "SMART", "ISLAND", "USD", "", 0);
    
    1. 最后(如果您使用的是64位Windows)以32位代码编译项目。转到配置管理器,然后创建新的配置文件“x86”并将所有配置设置为x86。