7

コールドフュージョンのdllから作成された.netオブジェクトのメソッドをインスタンス化して呼び出そうとしています。これは、引数が1つまたは0のメソッドを呼び出すと機能しますが、-で失敗します。

System.MissingMethodException:汎用メソッドcoldfusion2net.test.setvarsが見つかりませんでした

複数の引数を持つメソッドを呼び出そうとしたとき。

これが私の単純なC#クラスです:

namespace coldfusion2net
{
    public class test
    {
        protected string myvar;
        protected string myvar2;
        public void setvars(string v, string v2) {
            myvar = v;
            myvar2 = v2;
        }
        public void setvar(string v) {
            myvar = v;
        }
        public string getvar(){
            return myvar;
        }
    }
}

これが私のColdFusionテストです。

<cfset dll = ExpandPath('./coldfusion2net.dll')>
<cfobject type=".NET" name="test" class="coldfusion2net.test" assembly="#dll#">
<cfset test.init()>
<!--- object has been loaded --->
<cfdump var="#test#">
<!--- so far so good --->
<cfset test.setvar("foo")>
<cfset s = test.getvar()>
<cfoutput>#s#</cfoutput>
<!--- wtf??? --->
<cfset test.setvars("foo","bar")>

dllをコンパイルするために、.net 3.5ランタイム(サーバー上にあるもの)を対象としたVisualStudio2010を使用しています。私はColdFusion8,0,0,176276を使用し てdll をロードしようとしています。

他の誰かがこのようなものを見たことがありますか?私は何か間違ったことをしていますか?これはCFのバグですか?

.NETの相互運用性の制限に関するAdobeライブドキュメントの記事を調べましたが、最も近いのは、「メソッドに同じ数のパラメーターを持ち、パラメーターのみが異なる複数の署名がある場合、ColdFusionは正しいデータ型変換を判別できないことです。データ型」。これはここでは問題ではないようです。

4

2 に答える 2

0

ここでフォローアップするだけです。CF9に移行すると、これが修正されました。8未満で動作させる方法がわかりませんでした。

于 2011-06-28T15:19:01.453 に答える