■No29564 (iSyouta さん) に返信
> 下記のエラーがでてしまいます。
とりあえず修正案。
★案1: C# 側は変更せず、VBScript 側を値渡しにする ★
'Call objCom.mtdReturn(objComDataBean)
Call objCom.mtdReturn((objComDataBean))
★案2: VBScript 側は変更せず、C# 側で MarshalAs(IDispatch) 属性を付加 ★
// public int mtdReturn( property_DataBean prpDb)
public int mtdReturn([MarshalAs(UnmanagedType.IDispatch)] property_DataBean prpDb)
> で、COM内のmtdReturnの引数を「object prpdb」に変えれば通るのですが、
> それだと、ASP側で代入した値が使用できずで困っています。
★案3: object で受け、それを C# 側でキャストする★
public void mtdReturn(object /* property_DataBean */ prpDb)
{
/*
if (prpDb == null)
{
throw new ArgumentNullException();
}
else if (!(prpDb is property_DataBean))
{
throw new InvalidOleVariantTypeException();
}
*/
property_DataBean p = (property_DataBean)prpDb;
p.intNUM3 = p.intNUM1 + p.intNUM2;
}
> 以下がソースになります。
以下、細かいツッコミ。
> Set objComDataBean = Server.CreateObject("ClassLibrary.property_DataBean")
> Set objCom = CreateObject("ClassLibrary.Method")
後者の記述は利用しないでください。
http://support.microsoft.com/kb/414599/ja
> %>
> Response.Write(objcomDataBean.intNum3)
スクリプトが、<%〜%>の外に書かれています。
それと上記の記述だと、
Call Response.Write((objcomDataBean.intNum3))
という意味になってしまいます。この場合は
Response.Write objcomDataBean.intNum3
あるいは
Call Response.Write(objcomDataBean.intNum3)
と記述してください。
> private int mintNUM1;
> private int mintNUM2;
>
mintNUM3 が抜けています。
> public int mtdReturn( property_DataBean prpDb)
> {
> prpDb.intNUM3 = prpDb.intNUM1 + prpDb.intNUM2;
> }
return がありません。または、戻り値を void にすべきかと。