掲示板一覧   -   トピック一覧
   EA API
     EA_GetMenuItemsのC++実装方法について


スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 トピック
未登録ゲスト
投稿日時: 2010-2-23 17:58

EA_GetMenuItemsのC++実装方法について

お世話になっております。

題名のとおり、EA_GetMenuItemsをC++で実装する方法について教えていただきたく、質問いたします。

VisualStudio2003にて、C++を用いて、アドインを作成しております。
サンプルを参考に、EA_Connectなどの実装方法は把握できたのですが、object EA_GetMenuItems(EA.Repository Repository, string MenuLocation, string MenuName)をC++で実装するにはどのように引数型を解釈するといいのでしょうか。

現在、DLL作成までは出来たのですが、ダイアログ上で右クリックをすると、『EA_GetMenuItems:パラメータが不正です』とエラーがでる状態です。

string EA_Connect(EA.Repository Repository)の場合、BSTR EA_Connect(IDispatch* Repository)のようですが、EA.RepositoryとIDispatch*の対応はどの資料を参照すると良いでしょうか。
tkouno
投稿日時: 2010-2-24 9:24
EA Administrator
投稿: 3939

Re: EA_GetMenuItemsのC++実装方法について

Enterprise ArchitectのAPIのオブジェクトは、ActiveX COMのオブジェクトですので、IDispatchインターフェースを持っています。

このあたりの詳細は、MicrosoftのサイトやMSDNなどで情報が見つかるのではないかと思います。Googleの検索でも、役に立つ情報が見つかるかもしれません。

ご参考になりましたら幸いです。
未登録ゲスト
投稿日時: 2010-2-24 10:02

Re: EA_GetMenuItemsのC++実装方法について

すでにMSDNもGoogleも活用してみましたが、残念ながら私が求めるものを適切に表現されたものは無かったので質問いたしております。

もう少し自習したいと思います。
tkouno
投稿日時: 2010-2-24 10:18
EA Administrator
投稿: 3939

Re: EA_GetMenuItemsのC++実装方法について

ご返信ありがとうございました。配慮が足らず、申し訳ございませんでした。

Enterprise ArchitectのAPIのCOMオブジェクトは、特別なことは行っていませんので、
通常のCOMオブジェクトと同様の方法で対処可能です。

お力になれず申し訳ございませんでした。

umesan
投稿日時: 2010-2-24 13:34
EA Administrator
投稿: 1551

Re: EA_GetMenuItemsのC++実装方法について

どこを参照して、下記のようにしたかは思い出せないのですが、
手元の VC6 ソースのEAアドインでは、以下で動作しているようです。

●idl の記述の抜き出し

interface IMainClass : IDispatch
{
  [id(2), helpstring("EA_GetMenuItems")]
    HRESULT EA_GetMenuItems(
    [in] IDispatch *Repository, 
    [in] BSTR MenuLocation, 
    [in] BSTR MenuName, 
    [out,retval] VARIANT *RetVal);
};


●クラスの記述の抜き出し

STDMETHODIMP CMainClass::EA_GetMenuItems
(IDispatch *Repository, BSTR MenuLocation, 
  BSTR MenuName, VARIANT *RetVal)
{
  RetVal->vt = VT_BSTR;
  RetVal->bstrVal = (_bstr_t)"This is addin menu";

  return S_OK;
}


参考になりましたら幸いです。

未登録ゲスト
投稿日時: 2010-2-24 13:56

Re: EA_GetMenuItemsのC++実装方法について

自己解決しました。

こちらのドキュメントを参照しました。
http://msdn.microsoft.com/ja-jp/library/95357zak.aspx

VARIANT_BOOL PtInCircle(OLE_XPOS_PIXELS xCoord, OLE_YPOS_PIXELS yCoord);
の場合、DISP_FUNCTION_ID(CMyAxUICtrl, "PtInCircle", dispidPtInCircle, PtInCircle, VT_BOOL, VTS_XPOS_PIXELS VTS_YPOS_PIXELS)
と記述例があり、それに習い

今回の場合
object EA_GetMenuItems(EA.Repository Repository, string MenuLocation, string MenuName)
ですので、
関数定義は
『BSTR EA_GetMenuItems(IDispatch* pDisp,BSTR MenuLocation,BSTR MenuName)』
として

『DISP_FUNCTION_ID(HelloWorld, "EA_GetMenuItems", dispidEA_GetMenuItems, EA_GetMenuItems,VT_BSTR, VTS_DISPATCH VTS_BSTR VTS_BSTR)』

と直したところ右クリックしたときに、自分で作成したメニューアイテムを出せるようになりました。

どうやって、公開されているI/Fと作成した関数を関連付けているのかが分からないままでしたので、丁度そのあたりをすっきりすることが出来ました。

これから、MenuClickイベントを使って、渡さたリポジトリからダイアグラムの図などを使用しようと思います。

多分EA.RepositryがIDispatch*型になってしまっているので、またそこでつまずくだろうなと思いますがよろしくお願いいたします。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ