Learn how to a build a cloud-first strategyRegister Now

x
?
Solved

return array from dll

Posted on 2016-09-15
13
Medium Priority
?
66 Views
Last Modified: 2016-09-15
hi.
I created dll that have to output an array from one of functions.
In program for dll no errors shows, but when I try to use the function in another program then it is impossible.
Here the code in dll:
  public static ushort GetSamplTrace(int m=16)
        {
            var arr = Array<ushort>.Empty(16)
            int pos;
            using (BinaryReader b = new BinaryReader(File.Open(dataPath, FileMode.Open)))
            {
                   pos = 29;
                    b.BaseStream.Seek(pos, SeekOrigin.Begin);
                    byte[] by = b.ReadBytes(2);
                    arr[0] = BitConverter.ToUInt16(by, 0);
                    for (int i=1;i<16;i++)
                    {
                        arr[i] = 0;
                    }

                return arr[16];
            }

        }

Here I try to use it:
                var arr = Array<ushort>.Empty(16);
                arr[16] =MyDll.fun.GetSamplTrace();
0
Comment
Question by:mastiSoft
  • 5
  • 4
  • 3
  • +1
13 Comments
 
LVL 45

Expert Comment

by:AndyAinscow
ID: 41799542
>> it is impossible.

Why?  What error message?


ps.  You return a ushort from the function but you talk of returning an array (NOT the same thing) in the question.
0
 
LVL 1

Author Comment

by:mastiSoft
ID: 41799555
first problem was pointed to dll. return arr[16]
it seams that I try to return value from index 16 (it not exist because the size of array 16)
I changed code lite:
  public static ushort GetSamplTrace(string path, int size)
        {
            var arr = Array<ushort>.Empty(size);
            int pos;
            using (BinaryReader b = new BinaryReader(File.Open(dataPath, FileMode.Open)))
            {
           
                    pos = 29;
                    b.BaseStream.Seek(pos, SeekOrigin.Begin);
                    byte[] by = b.ReadBytes(2);
                    arr[0] = BitConverter.ToUInt16(by, 0);
                    for (int y=1;y<size;i++)
                    {
                        arr[y] = 0;
                    }

                    return arr[16];
            }

        }
No error but I know it will not work. How to return an array not only the one item from it?

Then when  I call the array from dll in another program how to do that?
0
 
LVL 1

Author Comment

by:mastiSoft
ID: 41799557
if I try:   return arr;
then the error : cannot implicitly convert ushort[] to ushort.
0
What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

 
LVL 35

Expert Comment

by:sarabande
ID: 41799595
if I try:   return arr;
the return type must be ushort[].

Sara
0
 
LVL 45

Expert Comment

by:AndyAinscow
ID: 41799600
When you declare the function you declare what it will return, in this case you tell the compiler it will return a ushort.
public static ushort GetSamplTrace(string path, int size)

If you want to return an array you need to say so, try
public static Array<ushort> GetSamplTrace(string path, int size)
and then use return arr when the function is finished in the implementation.


ps.  Don't forget that arrays are zero based so an array with two members has, as valid, indexes of 0 and 1
0
 
LVL 64

Accepted Solution

by:
Fernando Soto earned 2000 total points
ID: 41799606
Hi mastiSoft;

Change the signature of the function and variable in the function to this.
 public static ushort[] GetSamplTrace ( int m = 16 ) {
            ushort[] arr = new ushort[16];

Open in new window

0
 
LVL 1

Author Comment

by:mastiSoft
ID: 41799635
To Andy:
now I have 2 errors not one as before
1. static types cannot be used as return type ( public static Array<ushort>GetSamplTrace(string path, int size)
2. cannot implicitly convert ushort[] to ushort. ( return arr)
0
 
LVL 1

Author Closing Comment

by:mastiSoft
ID: 41799644
simple and beautiful solution
0
 
LVL 45

Expert Comment

by:AndyAinscow
ID: 41799671
Hmmm.
I suggested using Array<ushort> as the return because you had said your function compiled OK.
Trying it here the compiler objects to
          var arr = Array<ushort>.Empty(size);

so you would have to do as Sara first suggested and use ushort[] as the return type.
0
 
LVL 64

Expert Comment

by:Fernando Soto
ID: 41799985
@Andy Array's are not generic types and you would get an error like this, " The non-generic type 'Array' cannot be used with type arguments".
0
 
LVL 45

Expert Comment

by:AndyAinscow
ID: 41800007
I can't always remember small details - I trusted the asker when they said their code compiled despite using that construct.  :-(
0
 
LVL 64

Expert Comment

by:Fernando Soto
ID: 41800018
Its OK Andy we all fall into that as well.
0
 
LVL 45

Expert Comment

by:AndyAinscow
ID: 41800041
It didn't help that I would not use a collection class anyway for an array of a basic type.  Too much overhead for when a simple classical array would suffice, but it would have meant rather less changes to the code for the asker and, who knows, maybe they did require the functionality of a collection.
0

Featured Post

What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

Question has a verified solution.

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

Real-time is more about the business, not the technology. In day-to-day life, to make real-time decisions like buying or investing, business needs the latest information(e.g. Gold Rate/Stock Rate). Unlike traditional days, you need not wait for a fe…
The article shows the basic steps of integrating an HTML theme template into an ASP.NET MVC project
In a question here at Experts Exchange (https://www.experts-exchange.com/questions/29062564/Adobe-acrobat-reader-DC.html), a member asked how to create a signature in Adobe Acrobat Reader DC (the free Reader product, not the paid, full Acrobat produ…
When cloud platforms entered the scene, users and companies jumped on board to take advantage of the many benefits, like the ability to work and connect with company information from various locations. What many didn't foresee was the increased risk…
Suggested Courses
Course of the Month20 days, 23 hours left to enroll

810 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