有關ActiveX控制項事件的問題

來源:互聯網
上載者:User
有關ActiveX控制項事件的問題 VCL組件開發及應用
http://www.delphi2007.net/DelphiVCL/html/delphi_20061221000855234.html
我在ActiveForm裡面添加了一個事件OnCall,參數為BSTR類型,  
  然後添加了一個Button,當單擊Button的時候引發OnCall事件,  
  我傳了一個String進去.  
  在JavaScript中我用一個簡單的顯示事件參數的函數來實現這個事件的回調.  
  結果運行時點擊Button提示  
  "Access   violation   at......".  
  高手們指教啊

建議用WideString,雙位元組,或者使用VARIANT

(1)BSTR類型是COM中使用的標準字串類型。它其實是一個32位指標,儲存字串首字元的地址。既然是指標類型,好的習慣應該是在定義一個BSTR類型變數時立刻初始化為NULL,即使隨後立刻就會對其進行賦值。  
          (2)pLastNode->get_text(BSTR*   pstrText)方法內部為返回的字串分配了記憶體資源,並將該字串的地址bsName變數中。  
          (3)外部使用者pLastNode->get_text方法的調用者必須自己調用SysFreeString(BSTR   bstr)方法釋放BSTR類型字串佔用的資源。  
          MSDN中用關於BSTR和其他字串類型的更詳細的敘述。

跟OnCall有關的定義:  
  procedure   OnCall(const   Param1:   WideString);   dispid   209;  
  TActiveFormXOnCall   =   procedure(ASender:   TObject;   const   Param1:   WideString)   of   object;  
  FOnCall:   TActiveFormXOnCall;  
  property   OnCall:   TActiveFormXOnCall   read   FOnCall   write   FOnCall;  
   
  procedure   TActiveFormX.Button1Click(Sender:   TObject);  
  var  
      msg:   WideString;  
  begin  
      msg:='測試';  
      self.FEvents.OnCall(msg);  
  end;  
  一點擊這個按鈕就出錯。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.