掲示板一覧   -   トピック一覧
   EA ソースコード生成・コード生成テンプレート
     EXEC_ADD_INの実装(C#)


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

EXEC_ADD_INの実装(C#)

EXEC_ADDONを、C#で作成しようと試みています。
ですが、うまくいかないのです。
初歩的なことなのかも知れませんがよろしくお願いいたします。

戻り値の型や引数をいくつかのパターンで試しています。
ヘルプではBasicで記述されておりますので、
型をC#用に変更しています。(<<これで間違っているのでしょうか?)
以下のようにいろいろ実装を試しましたがだめでした。
-----------
すべての関数は以下のように単にstringを返却しているだけのものです。(Addinの動作の確認のためだけなので)
戻り値の型 oProcessOperation(パラメータ)
{
return string;
}
----------
以下が実際に実装したコードです。

namespace EaAddin_ExecAddin001
{
public class ExecAddin001
{
static string strRtn = "Hello";
/*
object oProcessOperation(ref EA.Repository Repository, params object[] args)
//object oProcessOperation(ref EA.Repository Repository, object[] args)
object oProcessOperation(EA.Repository Repository, params object[] args)
//object oProcessOperation(EA.Repository Repository, object[] args)
object oProcessOperation(ref EA.Repository Repository, ref object[] args)
object oProcessOperation(EA.Repository Repository, ref object[] args)
*/
string oProcessOperation(ref EA.Repository Repository, params object[] args)
//string oProcessOperation(ref EA.Repository Repository, object[] args)
string oProcessOperation(EA.Repository Repository, params object[] args)
//string oProcessOperation(EA.Repository Repository, object[] args)
string oProcessOperation(ref EA.Repository Repository, ref object[] args)
string oProcessOperation(EA.Repository Repository, ref object[] args)
}
}

---------------------
なお、呼び出し部分は以下のようにしています。
$result = "Hello_1"
$result = %EXEC_ADD_IN("ExecAddin001","oProcessOperation","Test", "Test")%
$result

$resultには何も格納されません。(コード上なにも書かれない)
EXEC_ADD_INで、resultにNULL文字(?)を設定しているようです。

---------------------
また、アドインを登録後、
EAを立ち上げ、
[アドイン]->[アドインの管理]
で表示される"アドインマネージャ"では、
"EaAddin_ExecAddin001"の状態が"有効"になっています。
EA自体はアドインを認識しているようです。

---------------------
ちなみに、環境は、
EA::6.5.798
OS::XP Pro
.NET::v2.0.50727
VS::2005
です。

---------------------
何がどう違うのか分かりません。

よろしくお願いいたします。

tkouno
投稿日時: 2006-10-17 9:02
EA Administrator
投稿: 3939

Re: EXEC_ADD_INの実装(C#)

C#での引数についてはこちらでも調べてみますが、取り急ぎ
EXEC_ADD_INの第一引数の値を"EaAddin_ExecAddin001"として
再度ご確認くださいますと助かります。
(アドインマネージャに表示されている値を設定してみてください。)

よろしくお願いします。

sugimoto
投稿日時: 2006-10-17 12:50
EA Administrator
投稿: 1895

Re: EXEC_ADD_INの実装(C#)

数箇所を修正すると正しく動作することを確認しましたので、
その内容を報告いたします。

■呼び出し側
 tkounoのコメントのように"EaAddin_ExecAddin001"を指定してください。
 また、「機能マクロ」ヘルプには第3引数以降も記述がありますが、今回は必要ないため記述しなくても問題ありません。

 $result = %EXEC_ADD_IN("EaAddin_ExecAddin001","oProcessOperation")%

■アドイン側
 1) public 宣言をしてください。
 2) 第2引数の型をobjectとしてください。(戻り値はstringでもobjectでもどちらでも構いません。)

 public object oProcessOperation(EA.Repository rep, object args)

ご確認のほど、よろしくお願いします。
未登録ゲスト
投稿日時: 2006-10-18 2:37

Re: EXEC_ADD_INの実装(C#)

お忙しい中ありがとうございました。
以下の修正で動作しました。

1.EXEC_ADD_INの第一引数を"EaAddin_ExecAddin001"にする
2.アドイン関数をpublicにする

特に"2."に関しては本当に基本的なことで申し訳ありませんでした。

無事、解決しました。
これで、カスタマイズできる幅が大きくなります。
ありがとうございました。
未登録ゲスト
投稿日時: 2006-10-18 3:45

Re: EXEC_ADD_INの実装(C#)

なお、第3引数以降の関しては、以下のようにして取得できました。

public object oProcessOperation(EA.Repository Repository, object args)
{
int i = 0;
object[] oArgs = (object[])args;
for (i=0; i < oArgs.Length; ++i)
{

}
}

ありがとうございました。
sugimoto
投稿日時: 2006-10-18 10:03
EA Administrator
投稿: 1895

Re: EXEC_ADD_INの実装(C#)

EXEC_ADD_IN が動作したとのことで安心いたしました。
また、第3引数以降の取得方法について追加の情報ありがとうございます。

これらの情報は、今後C#を使用してEXEC_ADD_INを実装される方にとって、
とても有効だと思います。

また何かご質問や情報がありましたら、よろしくお願いします。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ