2

BSTR ポインターとして値を返すメソッドの一部を持つサードパーティの COM オブジェクトを使用しています。VBscript は Variant 型のみをサポートしているため、Object.Method(sMyString) のような方法で使用しようとすると、「型の不一致」エラーで適切に終了します。

このエラーは、オブジェクトがポインターではなく文字列を取得するため、VBscript インタープリターではなく、COM オブジェクト自体によって生成されていると思われます。文字列の配列を定義して回避しようとしましたが、それでも同じエラーです。

だから、誰かが同様の問題を抱えていて、どのような回避策が利用されているのか疑問に思っていました.

強調するだけです。COM オブジェクトを制御できません。それはベンダーのアプリケーションにあります。「そのまま」使わないといけない。

ありがとう、アルバート・ガレエフ

4

2 に答える 2

6

VBScript で使用できる型の規則は、他の言語に比べて少し制限されています。あなたの場合、あなたは持っています[in, out] BSTR *- これはサポートされていません。[out]パラメータに許可される唯一のタイプは ですVARIANT *BSTRVBScript では、その位置でタイプをサポートするために、タイプが [out, retval] である必要があります。もちろん、[retval]関数ごとに 1 つしか持てないので、多少制限があります。

いずれにせよ、サーバーコードを変更できないため、あなたは行き​​詰まっています。私なら、API を呼び出し可能なものにラップする C++ で COM ラッパーを作成します。COM ラッパーは、 を使用可能な に変更する[out] BSTR *こと[out] VARIANT *ができます。

于 2009-08-06T20:09:51.157 に答える
0

ラッパーの回避策を検討した結果、独自の API を開発するよりも、既存の COM オートメーション オブジェクトを使用する方がいくつかの利点があることがわかりました。

私はすでに Excel.Application オブジェクトを他の目的で使用しているので、VBA でいくつかのマクロを作成し、必要に応じて実行しました。

私のブログ投稿の詳細:

http://automation-beyond.com/2009/09/21/gp-qtp-automation-sanscript/

http://automation-beyond.com/2009/09/23/gp-automation-vbscript-limitation/

ありがとう、アルバート・ガレエフ

于 2009-09-24T12:37:02.113 に答える