有关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;
一点击这个按钮就出错。