Solved

Named array

Posted on 2006-07-03
5
314 Views
Last Modified: 2012-05-05
Hi,

Is there a posibility to return a named array from C++ COM dll to ASP?
I have a function that returns VARIANT value.
Can i set it up some how that it vould represent key and value mapping in ASP?

example:
varRetValue("Key1") = "Value1"
varRetValue("Key2") = "Value2"
varRetValue("Key3") = "Value3"

Thanks,
Giedrius
0
Comment
Question by:GiedriusS
  • 2
  • 2
5 Comments
 
LVL 18

Assisted Solution

by:JoseParrot
JoseParrot earned 50 total points
ID: 17030770
Hi,

You may pass and return classes, arrays and structs values.

Ex.:

in the program:
{
int A[4];

A[1] = 0;
MyFunction(A); // call the function
// A[1] now is 10
:
:
}


at function code
void MyFunction(int B[])
{
  B[1] = 10;
}

Jose
0
 

Author Comment

by:GiedriusS
ID: 17030932
remote function call is the only way?
0
 
LVL 18

Expert Comment

by:JoseParrot
ID: 17033588
No.
Classic (non .net) ASP passes a variant containing an array.
To better understand differences of passing parameters by value or by reference to/from ASP, take a look at
http://support.microsoft.com/kb/q197956/

Jose
0
 
LVL 25

Accepted Solution

by:
clockwatcher earned 75 total points
ID: 17035105
First off, in order to call anything from classic ASP, you're going to need to use an ActiveX DLL.  Assuming you know that and are doing that already, probably the easiest way to deal with returning a name/value collection to ASP is to use and return a scripting dictionary.  ASP programmers will be familiar with its use and you don't have to do any of the implementation yourself.  You just need to fill it with key/value pairs in your C++.

I posted an ATL sample (Visual C++ 6 project) at:  https://filedb.experts-exchange.com/incoming/ee-stuff/328-Q_21906708.zip

Here's the gist of it:

#import "C:\WINDOWS\system32\scrrun.dll" no_namespace rename("FreeSpace","FSpace") rename("Unknown", "Unk")

IDictionaryPtr m_Dictionary;

STDMETHODIMP CDictionarySample::GetDictionary(LPDISPATCH* retval)
{


     if (m_Dictionary.GetInterfacePtr() == NULL)
     {
         
          _variant_t key("mykey");
          _variant_t val("myval");

          m_Dictionary.CreateInstance("Scripting.Dictionary");
          m_Dictionary->Add((VARIANT*) &key, (VARIANT*) &val);


     }
     else
     {
          _variant_t key("addedanotherref");
          _variant_t value("again");
         
          m_Dictionary->Add((VARIANT*) &key, (VARIANT*) &value);

     }

     m_Dictionary.AddRef();

     m_Dictionary->QueryInterface(IID_IDispatch, reinterpret_cast<void**>(retval));

     return S_OK;
}


Calling it from vbscript:

set collection = createobject("Q_21906708.DictionarySample.1")

set map = collection.GetDictionary()
wscript.echo map("mykey")
map.add "hello","there"

set anotherref= collection.GetDictionary()
wscript.echo anotherref("hello")

wscript.echo map("addedanotherref")

for each key in anotherref.keys
  wscript.echo key & " = " & anotherref(key)
next
0
 

Author Comment

by:GiedriusS
ID: 17035968
thanks.
0

Featured Post

ScreenConnect 6.0 Free Trial

At ScreenConnect, partner feedback doesn't fall on deaf ears. We collected partner suggestions off of their virtual wish list and transformed them into one game-changing release: ScreenConnect 6.0. Explore all of the extras and enhancements for yourself!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Often, when implementing a feature, you won't know how certain events should be handled at the point where they occur and you'd rather defer to the user of your function or class. For example, a XML parser will extract a tag from the source code, wh…
Written by John Humphreys C++ Threading and the POSIX Library This article will cover the basic information that you need to know in order to make use of the POSIX threading library available for C and C++ on UNIX and most Linux systems.   [s…
The goal of the tutorial is to teach the user how to use functions in C++. The video will cover how to define functions, how to call functions and how to create functions prototypes. Microsoft Visual C++ 2010 Express will be used as a text editor an…
The viewer will learn how to user default arguments when defining functions. This method of defining functions will be contrasted with the non-default-argument of defining functions.

770 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question