ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

DelphiコミュのCOMオブジェクトとインターフェースについて

  • mixiチェック
  • このエントリーをはてなブックマークに追加
こんばんは。
COM関連をいじるのはこれが初めてなので、分からないことがあり質問させていただきました。

現在、Delphi 2006 Proを使用してファイルビューアのようなものを作っています。(都合上、以下にあげるクラス名、インターフェース名などの名前は変えてあります)

まず、定義の概略は下記の通りです。
type
TMyItem = class
public
 A:string;
 B:string;
 C:TStringList;
end;

IMyParser =interface
['{〜}']
 function Parse(str:string):TMyItem;
end;

TMyFile = class

public
 procedure Load(Parser:IMyParser);
end;

IMyPerser.Parseは与えられた文字列を解析してTMyItemのインスタンスを作成し、それに情報を入力して返すメソッドです。ファイル形式の違いを吸収する目的です。TMyFile.LoadメソッドはParser.Parseメソッドを使って得られたTMyItemを自クラス内に格納する処理をしています。


このIMyParserを継承した、外部のCOMオブジェクトをプラグインとしてファイルのロードに使えるようにしたいのです。ここで疑問がいくつか浮かびました。


1)COMオブジェクトを動的にロードするにはどうすればよいのか

2)他の言語(たとえばC#など)で、IMyParserを継承したオブジェクトを作成するにはどうすればよいのか。

(IMyParserのタイプライブラリを作成? それとも、その言語で同じGUIDでまったく同じメンバーのインターフェースを定義する?)

3)string型やTStringList型、そしてTMyItem型の扱いはどうなるのか。(やはりサーバー・クライアント双方でラッパークラスを定義しないといけないのか)

これらの点についてご教授下さい。
基本的なことで申し訳ありません。
もし参考になるWEBサイトなどがあれば、それも教えていただけると嬉しいです。

よろしくお願いします。

コメント(5)

1,CreateObject

2,TMyItem が厳しいと思う

3,TMyItemの代わりにout パラメータか
 プロパティで返す方がいいのでは?
お返事ありがとうございます。
CreateObjectという関数を使えばできるんですね。
確かにTMyItemを使うというのは汎用性に欠けるので設計を見直します。


何度も質問して申し訳ないのですが、

・通常のDLLの動的ロードのように、ファイル名は指定できなさそうですね。プラグインフォルダの中身のdllファイルなどを根こそぎregsvr32する以外になにか良い方法はないものでしょうか。うーん。 DllGetClassObjectでいけますか?

・今回一番良く分からないのが、インターフェースを公開する方法です。以下の流れであっていますでしょうか?

IMyParserのタイプライブラリを作成→そのタイプライブラリをインポートして継承したオブジェクトを作成→そのオブジェクトを動的にロードして操作

現在、MyParsersというunitにIMyParserを定義しているのですが、この状態でIMyParserのタイプライブラリを作成する方法も分かりません。

・string型の変数は、OLEString(あるのか知りませんが)みたいな専用の型とかPCharなどに置き換えなくても大丈夫なんでしょうか?
ヘルプから "COMベースアプリケーションの開発"
をお読みになる事をお勧めします。
COM オブジェクトウィザードの使い方
 を見て、ウイザードで作成し、タイプライブラリエディタ
でインターフェースを作った方がいいでしょう
string型は 代わりにBSTRを使うといいでしょう。
BSTRはdelphi側のWideStringと互換です
VCLにはIStringsもありますが
最初はVariant配列か、BSTRに改行入れてもらうインターフェースでやってみては?
返信おくれて申し訳ありません。

ありがとうございます。
だいたい感覚が掴めてきました。

もう一度ヘルプを熟読してみます。

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

Delphi 更新情報

Delphiのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング