[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

microsoft.public.dotnet.framework.interop

Marshaling array into COM Server ok, but can't return Array? ("Invalid procedure call or argument:"

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