2011-07-20 32 views
2

これは私が私の時間に直面している多くの奇妙な問題の一つであり、それは最高のクラシックASPの例には多くの問題のように説明しています:クラシックASP - 型が一致し

Set thing = Server.CreateObject("ClassName") ' a C++ COM dll class 
Set tool = Server.CreateObject("OtherClassName") ' a VB6 COM dll class 

これは私がTYを得る動作しない場合は、これは

Set session("thing") = thing 
tool.Method session("thing") 

に動作し

tool.Method thing 

動作しません。私は非常に困惑しており、正直でこれをどこから始めるべきか分かりません。どんなポインタの人々ですか?

+0

メソッドのparamはbyrefではありませんが、セッションから渡すとオブジェクトがvtable型の表現方法を変更できるというあなたの考え方を検討する価値があります。ありがとう! –

+0

VB6 COM dllメソッドは、ByValまたはByRefを定義しませんでした(ByValはデフォルトで使用していませんか?)。これをセッション変数またはローカル定義変数で動作するByValに変更しました。ありがとうYMSの提案、私は(興味のある)パラメータの種類をトレースする方法がある場合は疑問に思う –

+0

私は参照を見つけることができませんでしたが、VBはCOMオブジェクトと文字列(VT_BSTR)がデフォルトでByRefになると思いますこの声明を確認してください。 – yms

答えて

2

Classic VBでは、tool.MethodのパラメータがVT_BYREF型のバリアントであると予想しています。代わりに、C++ COMインスタンスがVT_DISPATCHまたはVT_UNKNOWNとして渡されていますが、セッションに格納するとVT_BYREFに変換される最初。