2017-10-19 26 views
0

私はDelphiのActiveXコントロールに問題があります。私は、ActiveXライブラリを作成し、次にActiveXフォームを作成します。私は1つの関数を定義し、この関数をJavaScriptから呼び出す必要があります。しかし、私はできません。 JavaScriptが「オブジェクトはプロパティまたはメソッド 'Method1'をサポートしていません」というエラーをスローします。JavaScriptからDelphiのActiveXメソッドを呼び出せません

このHTMLコードです:

<OBJECT id="GetDocsActiveX" classid="clsid:A03962E6-6030-46C0-988D-ADE26BC4BACD" codebase="GetDocs.ocx#version=1.0"> 
    <PARAM NAME="Color" VALUE="13417386"> 
</OBJECT> 

これは、Delphiコードである* .ridlファイル

interface IGetDocs: IDispatch 
{ 
    [id(0x000000E8)] 
    HRESULT _stdcall Method1(void); 
}; 

これは* _TLB.pasが

IGetDocs = interface(IDispatch) 
    ['{8F2BF1C6-98A5-4D6B-A43E-890698A3C91D}'] 
    procedure Method1; safecall; 
end; 

ファイルであり、これはあります実装を含むファイル

unit GetDocsU; 
{$WARN SYMBOL_PLATFORM OFF} 
interface 
uses 
    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, 
    ActiveX, AxCtrls, GetDocs_TLB, StdVcl, Vcl.StdCtrls, ShellApi, Vcl.XPMan, 
    IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdHTTP; 

type 
    TGetDocs = class(TActiveForm, IGetDocs)  
protected  
    procedure Method1; safecall; 
public 
    { Public declarations } 
    procedure Initialize; override; 
end; 

implementation 

uses ComObj, ComServ; 
{$R *.DFM} 
procedure TGetDocs.Method1; 

begin  
     MessageDlg('HI from active x', mtInformation, [mbOK], 0, mbOK); 
end; 

end. 

誰でもこの問題を助けることができます。私は公開されたセクションの公開セクションでメソッドを成功させずに移動しようとします。で要素を取得するために

var obj = $("#GetDocsActiveX"); 

のjQueryの行(または類似のライブラリ)のようになります。ここ

EDIT はJavaスクリプト

<script type="text/javascript"> 
try { 
     var obj = $("#GetDocsActiveX"); 
     if (obj) { 
      obj.Method1(); 
     } else { 
      alert("Object is not created!"); 
     } 
    } catch (ex) { 
     alert("Some error happens, error message is: " + ex.message); 
    } 
</script> 
+0

'GetOleObject'または' GetComObject'を使用してスタンドアローンのDelphiアプリケーションからActiveXオブジェクトをアクティブにできることを確認しましたか? Btw、あなたのj'scriptが正しいclsidを使用しているかどうかをあなたが投稿したものから読者に伝えることはできません。 – MartynA

+0

私はregsvr32でActivexを登録し、同じエラーが発生します。 – plamen

答えて

1

である私は、少なくともこの1つの誤りに気づきましたid 'GetDocsActiveX'しかし、jQueryは要素を直接返しません。これは、要素のコレクションをラップするjQueryオブジェクトを返します。あなたが探している実際の要素の代わりに、そのjQueryオブジェクトのメソッドを呼び出そうとします。

は、jQueryのコレクションからその要素を解明するための方法がありますが、私はそれは単なるJavaScriptを使用してオブジェクトを取得する方が簡単だと思う:

var obj = document.getElementById("GetDocsActiveX"); 

をしたり、楽しむ場合は、セレクタでの作業:

var obj = document.querySelector("#GetDocsActiveX"); 
+0

今、アドバイスをいただきありがとうございます。この場合はjqueryを使用すべきではありませんが、わかりませんでした。私はdocument.getElementById( "GetDocsActiveX")と思う。とvar obj = $( "#GetDocsActiveX");同じ結果を与えるが、私は間違っていた。ありがとうございました。 – plamen

+0

あなたはようこそ! JQueryを使用するのは簡単な間違いです。もしあなたが好きなら、[誰かが私の質問に答えたときに何をすべきですか?](https://stackoverflow.com/help/someone-answers)を読んでフォローアップしてください。 – GolezTrol

関連する問題