HighTechTalks DotNet Forums  

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

Dotnet Framework (Interop) microsoft.public.dotnet.framework.interop


Discuss Marshaling array into COM Server ok, but can't return Array? ("Invalid procedure call or argument:") in the Dotnet Framework (Interop) forum.



Reply
 
Thread Tools Search this Thread Display Modes
  #1  
Old   
Sky
 
Posts: n/a

Default Marshaling array into COM Server ok, but can't return Array? ("Invalid procedure call or argument:") - 11-09-2007 , 05:45 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 (AT) hotmail (DOT) com


Reply With Quote
Reply




Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off



Powered by vBulletin Version 3.5.4
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.