编译通过,可一点"连接设备"等按钮,就出现存取地址违例,提示:Project t1.exe raised exception class EAccessviolation with message '存取地址 10002EBD违例发生在模块'EtesnMMS.ocx'中,读在地址00000004里',Process stopped.use step or run to continue.
请问一般是什么原因造成这些的?这个控件在vc下没有任何问题,因为我对delphi很不熟悉,很简单的弄了一下,请大家看一下有哪些可以会造成这个问题.谢谢.
ps:下面的乱码是汉字和注释信息,应该不影响判断吧?复制下来就是乱码.晕.谢谢.
unit ocx6;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, OleCtrls, ETESNMMSLib_TLB, StdCtrls;type
  TForm1 = class(TForm)
    Exit: TButton;
    InitModel: TButton;
    SendSMS: TButton;
    SendMMS: TButton;
    DisConnectModem: TButton;
    ConnectModem: TButton;
    EtesnMMS1: TEtesnMMS;
    procedure InitModelClick(Sender: TObject);
    procedure ConnectModemClick(Sender: TObject);
    procedure DisConnectModemClick(Sender: TObject);
    procedure SendMMSClick(Sender: TObject);
    procedure SendSMSClick(Sender: TObject);
    procedure ExitClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Form1: TForm1;implementation
{$R *.dfm}procedure TForm1.InitModelClick(Sender: TObject);
//初始化
var nRes:integer;
begin
  nRes:=EtesnMMS1.InitModel('C:\RecvMMS',7,1,101,1);
  if(nRes>0)
     then
       showMessage(初始化成功')
       else if(nRes=0)
         then ShowMessage('初始化失败')
       else if(nRes=-4)
          then ShowMessage('³õʼ»¯Ê§°Ü,²»Ö§³ÖµÄ¼ÓÃܹ·ÀàÐÍ!')
end;
procedure TForm1.ConnectModemClick(Sender: TObject);
//Á¬½ÓÉ豸
var
  nRes:integer;
begin
  nRes:=EtesnMMS1.ConnectModem('com1');
  if (nRes=1)
     then showmessage('ÕýÔÚÆô¶¯Á¬½ÓÉ豸£¬ÇëÉÔºò')
      else if (nRes=-1)
         then showmessage('δ³É¹¦³õʼ»¯¿Ø¼þ£¬ÇëÏȳõʼ»¯¿Ø¼þ')end;procedure TForm1.DisConnectModemClick(Sender: TObject);
//¶Ï¿ªÉ豸Á¬½Ó
begin
  EtesnMMS1.DisConnectModem;
  showmessage('ÒѾ­¶Ï¿ªÉ豸Á¬½Ó');
end;procedure TForm1.SendMMSClick(Sender: TObject);
//·¢ËͲÊÐÅ
 var
   nRes,m_nSendMsgIndex:integer;
   m_strSendNumber,m_strMMSTitle,m_strMMSRes:string;
begin
  nRes:=EtesnMMS1.SendMMS(m_strSendNumber,m_strMMSTitle,m_strMMSRes,m_nSendMsgIndex);  if (nRes=1)
    then showmessage('Ìá½»²ÊÐųɹ¦£¬²ÊÐÅÒѼÓÈë´ý·¢Áбí')
    else if(nRes=-1)
         then showmessage('Ìá½»²ÊÐÅʧ°Ü£¬ÉÐδÁ¬½Óµ½²ÊÐÅÉ豸')
         else if(nRes=-2)
              then showmessage('Ìá½»²ÊÐÅʧ°Ü£¬µ±Ç°Ê¹ÓÃģʽ²»Ö§³Ö¶ÌÐÅÊÕ·¢')
              else if(nRes=-3)
                   then showmessage('Ìá½»²ÊÐÅʧ°Ü£¬Î´³É¹¦³õʼ»¯Ä£¿é£¬ÇëÏȳõʼ»¯¿Ø¼þ')
                   else if(nRes=-4)
                        then showmessage('Ìá½»²ÊÐÅʧ°Ü£¬²ÊÐÅÐÅÏ¢Îļþ²»´æÔÚ»òΪ¿Õ')
                        else if(nRes=-5)
                             then showmessage('²ÊÐÅÐÅÏ¢Îļþ¸ñʽ²»ÕýÈ·')
end;procedure TForm1.SendSMSClick(Sender: TObject);
//·¢ËͶÌÐÅ
var
  nRes,m_nSendMsgIndex:integer;
  strSendNumber,strSmsContent:string;
begin
  nRes:=EtesnMMS1.SendSMS(strSendNumber,strSmsContent,m_nSendMsgIndex);
  if(nRes=1)
     then showmessage('Ìá½»¶ÌÐųɹ¦£¬ÒѼÓÈë¶ÌÐÅ´ý·¢Áбí')
     else if(nRes=-1)
          then showmessage('Ìá½»¶ÌÐÅʧ°Ü£¬ÉÐδÁ¬½Óµ½¶ÌÐÅÉ豸')
          else if(nRes=-2)
               then showmessage('Ìá½»¶ÌÐÅʧ°Ü£¬µ±Ç°Ê¹ÓÃģʽ²»Ö§³Ö¶ÌÐÅÊÕ·¢')
               else if(nRes=-3)
                    then showmessage('Ìá½»¶ÌÐÅʧ°Ü£¬Î´³É¹¦³õʼ»¯¿Ø¼þ£¬ÇëÏȳõʼ»¯')end;procedure TForm1.ExitClick(Sender: TObject);
//Í˳ö
begin
  close;
end;procedure TForm1.FormCreate(Sender: TObject);
beginend;end.

解决方案 »

  1.   

    晕.怎么是那样呀.重发一下.unit ocx6;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, OleCtrls, ETESNMMSLib_TLB, StdCtrls;type
      TForm1 = class(TForm)
        Exit: TButton;
        InitModel: TButton;
        SendSMS: TButton;
        SendMMS: TButton;
        DisConnectModem: TButton;
        ConnectModem: TButton;
        EtesnMMS1: TEtesnMMS;
        procedure InitModelClick(Sender: TObject);
        procedure ConnectModemClick(Sender: TObject);
        procedure DisConnectModemClick(Sender: TObject);
        procedure SendMMSClick(Sender: TObject);
        procedure SendSMSClick(Sender: TObject);
        procedure ExitClick(Sender: TObject);
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation
    {$R *.dfm}procedure TForm1.InitModelClick(Sender: TObject);
    //³õʼ»¯¿Ø¼þ
    var nRes:integer;
    begin
      nRes:=EtesnMMS1.InitModel('C:\RecvMMS',7,1,101,1);
      if(nRes>0)
         then
           showMessage('³õʼ»¯¿Ø¼þ³É¹¦,ÕÒµ½¼ÓÃܹ·!')
           else if(nRes=0)
             then ShowMessage('³õʼ»¯¿Ø¼þʧ°Ü,δÕÒµ½¼ÓÃܹ·!')
           else if(nRes=-4)
              then ShowMessage('³õʼ»¯Ê§°Ü,²»Ö§³ÖµÄ¼ÓÃܹ·ÀàÐÍ!')
    end;
    procedure TForm1.ConnectModemClick(Sender: TObject);
    //Á¬½ÓÉ豸
    var
      nRes:integer;
    begin
      nRes:=EtesnMMS1.ConnectModem('com1');
      if (nRes=1)
         then showmessage('ÕýÔÚÆô¶¯Á¬½ÓÉ豸£¬ÇëÉÔºò')
          else if (nRes=-1)
             then showmessage('δ³É¹¦³õʼ»¯¿Ø¼þ£¬ÇëÏȳõʼ»¯¿Ø¼þ')end;procedure TForm1.DisConnectModemClick(Sender: TObject);
    //¶Ï¿ªÉ豸Á¬½Ó
    begin
      EtesnMMS1.DisConnectModem;
      showmessage('ÒѾ­¶Ï¿ªÉ豸Á¬½Ó');
    end;procedure TForm1.SendMMSClick(Sender: TObject);
    //·¢ËͲÊÐÅ
     var
       nRes,m_nSendMsgIndex:integer;
       m_strSendNumber,m_strMMSTitle,m_strMMSRes:string;
    begin
      nRes:=EtesnMMS1.SendMMS(m_strSendNumber,m_strMMSTitle,m_strMMSRes,m_nSendMsgIndex);  if (nRes=1)
        then showmessage('Ìá½»²ÊÐųɹ¦£¬²ÊÐÅÒѼÓÈë´ý·¢Áбí')
        else if(nRes=-1)
             then showmessage('Ìá½»²ÊÐÅʧ°Ü£¬ÉÐδÁ¬½Óµ½²ÊÐÅÉ豸')
             else if(nRes=-2)
                  then showmessage('Ìá½»²ÊÐÅʧ°Ü£¬µ±Ç°Ê¹ÓÃģʽ²»Ö§³Ö¶ÌÐÅÊÕ·¢')
                  else if(nRes=-3)
                       then showmessage('Ìá½»²ÊÐÅʧ°Ü£¬Î´³É¹¦³õʼ»¯Ä£¿é£¬ÇëÏȳõʼ»¯¿Ø¼þ')
                       else if(nRes=-4)
                            then showmessage('Ìá½»²ÊÐÅʧ°Ü£¬²ÊÐÅÐÅÏ¢Îļþ²»´æÔÚ»òΪ¿Õ')
                            else if(nRes=-5)
                                 then showmessage('²ÊÐÅÐÅÏ¢Îļþ¸ñʽ²»ÕýÈ·')
    end;procedure TForm1.SendSMSClick(Sender: TObject);
    //·¢ËͶÌÐÅ
    var
      nRes,m_nSendMsgIndex:integer;
      strSendNumber,strSmsContent:string;
    begin
      nRes:=EtesnMMS1.SendSMS(strSendNumber,strSmsContent,m_nSendMsgIndex);
      if(nRes=1)
         then showmessage('Ìá½»¶ÌÐųɹ¦£¬ÒѼÓÈë¶ÌÐÅ´ý·¢Áбí')
         else if(nRes=-1)
              then showmessage('Ìá½»¶ÌÐÅʧ°Ü£¬ÉÐδÁ¬½Óµ½¶ÌÐÅÉ豸')
              else if(nRes=-2)
                   then showmessage('Ìá½»¶ÌÐÅʧ°Ü£¬µ±Ç°Ê¹ÓÃģʽ²»Ö§³Ö¶ÌÐÅÊÕ·¢')
                   else if(nRes=-3)
                        then showmessage('Ìá½»¶ÌÐÅʧ°Ü£¬Î´³É¹¦³õʼ»¯¿Ø¼þ£¬ÇëÏȳõʼ»¯')end;procedure TForm1.ExitClick(Sender: TObject);
    //Í˳ö
    begin
      close;
    end;procedure TForm1.FormCreate(Sender: TObject);
    beginend;end.
      

  2.   

    太阳哦.我把showmessage信息都不要了.再重发一次.汗...unit ocx6;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, OleCtrls, ETESNMMSLib_TLB, StdCtrls;type
      TForm1 = class(TForm)
        Exit: TButton;
        InitModel: TButton;
        SendSMS: TButton;
        SendMMS: TButton;
        DisConnectModem: TButton;
        ConnectModem: TButton;
        EtesnMMS1: TEtesnMMS;
        procedure InitModelClick(Sender: TObject);
        procedure ConnectModemClick(Sender: TObject);
        procedure DisConnectModemClick(Sender: TObject);
        procedure SendMMSClick(Sender: TObject);
        procedure SendSMSClick(Sender: TObject);
        procedure ExitClick(Sender: TObject);
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation
    {$R *.dfm}procedure TForm1.InitModelClick(Sender: TObject);
    //³õʼ»¯¿Ø¼þ
    var nRes:integer;
    begin
      nRes:=EtesnMMS1.InitModel('C:\RecvMMS',7,1,101,1);
      if(nRes>0)
         then
           showMessage('!')
           else if(nRes=0)
             then ShowMessage('³!')
           else if(nRes=-4)
              then ShowMessage('!')
    end;
    procedure TForm1.ConnectModemClick(Sender: TObject);
    //
    var
      nRes:integer;
    begin
      nRes:=EtesnMMS1.ConnectModem('com1');
      if (nRes=1)
         then showmessage('')
          else if (nRes=-1)
             then showmessage('')end;procedure TForm1.DisConnectModemClick(Sender: TObject);
    //
    begin
      EtesnMMS1.DisConnectModem;
      showmessage('');
    end;procedure TForm1.SendMMSClick(Sender: TObject);
    //
     var
       nRes,m_nSendMsgIndex:integer;
       m_strSendNumber,m_strMMSTitle,m_strMMSRes:string;
    begin
      nRes:=EtesnMMS1.SendMMS(m_strSendNumber,m_strMMSTitle,m_strMMSRes,m_nSendMsgIndex);  if (nRes=1)
        then showmessage('')
        else if(nRes=-1)
             then showmessage('')
             else if(nRes=-2)
                  then showmessage('')
                  else if(nRes=-3)
                       then showmessage('')
                       else if(nRes=-4)
                            then showmessage('')
                            else if(nRes=-5)
                                 then showmessage('')
    end;procedure TForm1.SendSMSClick(Sender: TObject);
    //
    var
      nRes,m_nSendMsgIndex:integer;
      strSendNumber,strSmsContent:string;
    begin
      nRes:=EtesnMMS1.SendSMS(strSendNumber,strSmsContent,m_nSendMsgIndex);
      if(nRes=1)
         then showmessage('')
         else if(nRes=-1)
              then showmessage('')
              else if(nRes=-2)
                   then showmessage('')
                   else if(nRes=-3)
                        then showmessage('')end;procedure TForm1.ExitClick(Sender: TObject);
    //
    begin
      close;
    end;procedure TForm1.FormCreate(Sender: TObject);
    beginend;end.
      

  3.   

    详细信息:
    http://community.csdn.net/Expert/topic/4718/4718418.xml?temp=.9438593
    注:这个ocx控件在vc下正常,不过,它使用了多线程,不知道在delphi中是否有影响.
    谢谢好心的大哥/大姐回复.谢谢.