Sky
11/9/2007 10:45:00 AM
Hi , I use C# and VS2005 to create .net COM server for ASP client
usage.
but I get the error message, when had one problem I can't figure out.
Here is my testing program:
//--------------------------------------------------------------------
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
[Guid("xxxx-xxx-xxx-xxx-xxx")]
public interface ITest
{
// Test1:
void TestArrayIn([MarshalAs(UnmanagedType.SafeArray,
SafeArraySubType = VarEnum.VT_VARIANT)] ref object[] argAry);
// Test2:
[return: MarshalAs(UnmanagedType.SafeArray, SafeArraySubType =
VarEnum.VT_VARIANT)]
object[] TestArrayOut();
// Test3:
[return: MarshalAs(UnmanagedType.SafeArray, SafeArraySubType =
VarEnum.VT_VARIANT)]
object[] TestArrayInAndOut([MarshalAs(UnmanagedType.SafeArray,
SafeArraySubType = VarEnum.VT_VARIANT)] ref object[] argAry);
// Test4:
object[] TestArrayInAndOut2(ref object[] argAry);
}
[ClassInterface(ClassInterfaceType.None)]
[ProgId("myProject.Test")]
public class CTest : ITest
{
public CTest() { } // Default Constructor.
// Test1: Array In
public void TestArrayIn(
[MarshalAs(UnmanagedType.SafeArray, SafeArraySubType =
VarEnum.VT_VARIANT)] ref object[] argAry)
{
}
// Test2: Array Out
[return: MarshalAs(UnmanagedType.SafeArray, SafeArraySubType =
VarEnum.VT_VARIANT)]
public object[] TestArrayOut()
{
object[] aryOut ={ "Hello", "Kitty" };
return aryOut;
}
// Test3: Array In And Out
[return: MarshalAs(UnmanagedType.SafeArray, SafeArraySubType =
VarEnum.VT_VARIANT)]
public object[] TestArrayInAndOut(
[MarshalAs(UnmanagedType.SafeArray, SafeArraySubType =
VarEnum.VT_VARIANT)] ref object[] argAry)
{
object[] aryOut ={ "Hello", "Kitty" };
return aryOut;
}
// Test4: Array In And Out using defualt marshaling
public object[] TestArrayInAndOut2(ref object[] argAry)
{
object[] aryOut ={ "String1", "string2" };
return aryOut;
}
}
//--------------------------------------------------------------------
and using the following asp code to call this COM Server:
//--------------------------------------------------------------------
set oTest=Server.CreateObject("myProject.Test")
ary=array("ABC","DEF")
oTest.TestArrayIn(ary) ' This function work fine.
returnArray=oTest.TestArrayOut() ' work fine too.
ReturnArray=oTest.TestArrayInAndOut(ary) 'got the asp error: "Invalid
procedure call or argument: 'TestArrayInAndOut'"
oTest.TestArrayInAndOut(ary) ' but this work fine! why ???
//--------------------------------------------------------------------
Any Idea ?
Thanks.
Sky Linm
mduser602@hotmail.com