delphi2007 教程

delphi2007 教程

首页 新随笔 联系 聚合 管理
  1013 Posts :: 0 Stories :: 28 Comments :: 0 Trackbacks
有关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;  
  一点击这个按钮就出错。

posted on 2009-01-04 16:51 delphi2007 阅读(367) 评论(0)  编辑 收藏 引用
只有注册用户登录后才能发表评论。