That is how the function definition appears in the inteop assembly that VS 
creates from an ActiveX library.

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

Tov Mallorn - The Googooplex Names of Tom Servo!


From: Charles A. Lopez 
Sent: Wednesday, January 05, 2011 16:57
To: [email protected] 
Subject: Re: [DotNetDevelopment] Marshel array of integers to C++ ActiveX method

who wrote: 

Public Overridable Function ReadFFT(ByRef pArray As Integer, ByVal wCount As 
Short) As Short


?


On 4 January 2011 08:44, Jeff Steinkamp (N7YG) <[email protected]> wrote:

  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]









-- 
Charles A. Lopez
[email protected]

What's your vision for your organization?
What's your biggest challenge?

Let's talk. 
(IBM Partner)


Reply via email to