0

重複の可能性:
delphi ActiveXコントロールのパブリック関数にアクセスできませんか?

DelphiによるActiveXコントロールの実装を使用しています。私のメインクラスでは、次のことがあります。

  type
      TezDICOMX = class(TActiveForm, IezDICOMX)
        ToolBar1: TToolBar;
        OpenBtn: TSpeedButton;
        PreviousBtn: TSpeedButton;

....これらのコードをクラスに追加します。

 published
procedure abc; safecall;

その後、プロジェクトをビルドしてActiveXサーバーを登録します。ezDICOMax.ocxを生成します。Visual Studioを開き、以前に埋め込んだ残りのezDICOM activeXコントロールを削除して、新しいコントロールを埋め込みます。ActiveXコントロールをデザインにドラッグし、the_ezdicomという名前を付けます。ですから、私が思うに、the_ezdicom.abc()を呼び出す必要がありますが、そうすると、コンパイラは文句を言います。

'AxezDICOMax.AxezDICOMX' does not contain a definition for 'abc' and no extension method 'abc' accepting a first argument of type 'AxezDICOMax.AxezDICOMX' could be found (are you missing a using directive or an assembly reference?) 

私が間違ったことは何ですか?Delphiを使用してActiveXコントロールで公開されたプロシージャ/関数を作成するにはどうすればよいですか?クラス内の既存の関数/プロシージャを変更し、すべての登録、埋め込みステップを実行すると、C#から呼び出したときのその関数/プロシージャの結果も変更されるため、ActiveXコントロールがDelphiソースに更新されると思いますが、公開されているプロシージャ/関数をまだ追加できません。

4

2 に答える 2

2

必要がある:

  1. タイプ ライブラリを編集して (タイプ ライブラリ エディタを使用)、新しいメソッドを追加します。
  2. 実装を更新し (これは、IDE の設定に応じて、タイプ ライブラリ エディターによって自動的に実行できます)、生成されたメソッド本体に実装コードを記述します。
  3. ActiveX サーバーを構築して再登録します (新しいインターフェイスまたはデータ型を追加した場合)。regsvr32 は保護されたレジストリ ブランチにアクセスする必要があるため、管理者として実行します。

この場合、インプリメンタ メソッドの Delphi 可視性は関係ありません。クラスは、Delphi クラス インスタンス ポインタではなく、インターフェイス ポインタを介して使用されることになっています。したがって、タイプ ライブラリ エディタによって生成されるので、保護しておくことをお勧めします。

于 2012-09-09T10:09:40.670 に答える
0

Visual Studio の問題であることがわかりました。ActiveX コントロールのインターフェイスを変更したため、プロジェクト内の ActiveX コントロールへの参照を削除し、再度追加する必要があります。インターフェイスを変更しない場合は、activeX コントロールの登録を解除して登録するだけで十分です。

于 2012-09-09T16:42:13.153 に答える