有關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;
一點擊這個按鈕就出錯。