VB .NET Passing a Structure containing an array of String and an array of Integer into a C++ DLL
- by DanJunior
Hi everyone, I'm having problems with marshalling in VB .NET to C++, here's the code :
In the C++ DLL :
struct APP_PARAM
{
    int numData;
    LPCSTR *text;
    int *values;
};
int App::StartApp(APP_PARAM params)
{
    for (int i = 0; i < numLines; i++)
    {
        OutputDebugString(params.text[i]);
    }
}
In VB .NET :
  <StructLayoutAttribute(LayoutKind.Sequential)> _
  Public Structure APP_PARAM
    Public numData As Integer
    Public text As System.IntPtr
    Public values As System.IntPtr
  End Structure
  Declare Function StartApp Lib "AppSupport.dll" (ByVal params As APP_PARAM) As Integer
  Sub Main()
    Dim params As APP_PARAM
    params.numData = 3
    Dim text As String() = {"A", "B", "C"}
    Dim textHandle As GCHandle = GCHandle.Alloc(text)
    params.text = GCHandle.ToIntPtr(textHandle)
    Dim values As Integer() = {10, 20, 30}
    Dim valuesHandle As GCHandle = GCHandle.Alloc(values)
    params.values = GCHandle.ToIntPtr(heightHandle)
    StartApp(params)
    textHandle.Free()
    valuesHandle.Free()
  End Sub
I checked the C++ side, the output from the OutputDebugString is garbage, the text array contains random characters. What is the correct way to do this?? Thanks a lot...