1

次のように定義された COM オブジェクト メソッドを参照しようとしています。

IEdmFile7::GetDerivedBOMs  
Returns the derived (a.k.a. "named" or "saved") bills of materials associated with this file.  
Prototype:

HRESULT GetDerivedBOMs( [out,ref] SAFEARRAY ( struct EdmBomInfo ) *ppoBoms );

edmFile 変数に IEdmFile7 オブジェクトへの参照があります。

メソッドが次のように表示される場合<cfdump var="#edmFile#">

Method: GetDerivedBOMs([out]USERDEFINED, [out, retval]VOID)

メソッドを呼び出そうとすると(多くの異なるパラメータータイプを渡そうとしました):

<cfset edmFile.GetDerivedBOMs(???)>

でエラーになりAutomationException: Member not foundます。パラメータを正しく認識またはキャストしていないと推測できます。(構造体の) safearray への参照をメソッドに正しく渡すにはどうすればよいですか?

(コメントから編集)

私が試したことのいくつかの例:

 <cfset myObject = createObject("java","java.lang.Object").init()> 
 <cfset myArray = arrayNew(1)> 
 <cfset myRefArrayOfObjects = javaCast("java.lang.Object[]", myArray)> 
 <cfset myResultArray = edmFile.GetDerivedBOMs(myRefArrayOfObjects)> 

結果:

 Member Not Found Description: Automation Exception: Member Not Found 

コメントからの別の試み:

<cfset myArray = ArrayNew(1)> 
<cfset myArray = edmFile.GetDerivedBOMs()> 

結果:

There are no methods with the specified method name and argument types. 
Check your function and retry 
4

1 に答える 1

1

残念ながら、これは .net 相互運用の制限です。CFドキュメントから

http://help.adobe.com/en_US/ColdFusion/9.0/Developing/WSc3ff6d0ea77859461172e0811cbec13e1a-7fd4.html

  • ポインターを引数または戻り値の型としてメソッドを呼び出すことはできません。
  • Out パラメーターを受け取るメソッドを呼び出すことはできません。

この場合、作成されて OUT パラメータとして返される safearray 型の変数の byref アドレス [ポインタ] でそれらの両方をヒットしています。

このような場合、.net クラスを作成してこれを「ラップ」し、CF がこれを行う際の問題を説明する仲介者として機能する方が簡単であることがわかりました。

于 2013-08-27T16:53:40.697 に答える