Nope.  Tried that and others to get the address of the array and I ether get, 
“This applications has quite working” without anything bubbling up though the 
debugger, or and error that says we are trying to address protected memory.

Jeff K. Steinkamp N7YG
Tucson, AZ
SCUD Missile Coordinates:
N032-13-55.02 W110-55-52.79
Registered Linux User: 420428
------------------------------------------------------

Give thanks to the Lord, for he is good!


From: Arsalan Tamiz 
Sent: Monday, January 03, 2011 23:42
To: [email protected] 
Subject: Re: [DotNetDevelopment] Marshel array of integers to C++ ActiveX method

Reading the parameter name which is pArray, it seems that the whole array 
should be passed. 

Have you tried passing the address of array? Maybe the declaration of API 
method is also NOT valid.

Anyways to get the address of a variable, you case 
System.Runtime.InteropServices namespace and can use GCHandle class.

Example:

Dim a() As Integer = {5, 6, 4, 10}
Dim gh As GCHandle = System.Runtime.InteropServices.GCHandle.Alloc(a, 
GCHandleType.Pinned)
Dim i As IntPtr = gh.AddrOfPinnedObject()
Debug.Print(i.ToInt32())   ' <--- getting address of array
gh.Free()



On Mon, Jan 3, 2011 at 5:52 PM, Jeff Steinkamp (N7YG) <[email protected]> 
wrote:

  The reference to parray is an array of 2048 integers that represents FFT 
data.  I’m trying to get those from the ActiveX control into my program so I 
can manipulate them for further processing

  Jeff K. Steinkamp N7YG
  Tucson, AZ
  SCUD Missile Coordinates:
  N032-13-55.02 W110-55-52.79
  Registered Linux User: 420428
  ------------------------------------------------------


  Small white pigeons mysteriously appeared in people's clothing.


  From: Charles A. Lopez 
  Sent: Sunday, January 02, 2011 22:47
  To: [email protected] 
  Subject: Re: [DotNetDevelopment] Marshel array of integers to C++ ActiveX 
method

  What are you trying to do?


  On 1 January 2011 01:41, Jeff Steinkamp (N7YG) <[email protected]> wrote:

    I have an ActiveX library that was built using C++ with the following 
method:
    �
    Public Overridable Function ReadFFT(ByRef pArray As Integer, ByVal wCount 
As Short) As Short
    �
    I can dissemble the Interop files created and the declaration is 
ReadFFT(int32&, int16)
    �
    I assumed you could write the following and it would work:
    �
    dim ar(2047) as int32
    myActiveXLib.ReadFFT(ar(0),arr.length)
    �
    But the CLR croaks with some cryptic messages about MDR
    �
    �
    How do you marshal this into the unmanaged ActiveX world?
    �
    �
    Jeff K. Steinkamp N7YG
    Tucson, AZ
    SCUD Missile Coordinates:
    N032-13-55.02 W110-55-52.79
    Registered Linux User: 420428
    ------------------------------------------------------

    Orville Bullitt - Mouth is in gear, brain is in neutral.




  -- 
  Charles A. Lopez
  [email protected]





Reply via email to