Home All Groups Group Topic Archive Search About

using c++ 6.0 DLL in VB.Net program, passing user defined Type

Author
20 Jul 2006 10:07 PM
nickolais909
Hello,
I have an old C++ DLL that I am wishing to use in a VB.NET program.
Previously I had a VB6 program that would pass a Type to a DLL
function.  For example, I would pass a variable of this Type in:

Public Type ListInfo     ' structure to hold information about the list
file
    FileIndex As Integer
    filename(MAXNAME) As Byte
    FileNum As Integer
    FileIcon As Integer
End Type

I am writing a new VB.NET program that will use the same DLL that was
used by the VB6 program, but I have had to update the data type to be a
structure:

   Public Structure ListInfo     ' structure to hold information about
the list file
        Dim FileIndex As Short
        Dim filename() As Byte
        Dim FileNum As Short
        Dim FileIcon As Short
    End Structure
    'integers made Shorts b/c of Int size change

My DLL does not like the new data type.  Does anyone know of a solution?

Author
20 Jul 2006 11:06 PM
Herfried K. Wagner [MVP]
<nickolais***@yahoo.com> schrieb:
Show quoteHide quote
> I have an old C++ DLL that I am wishing to use in a VB.NET program.
> Previously I had a VB6 program that would pass a Type to a DLL
> function.  For example, I would pass a variable of this Type in:
>
> Public Type ListInfo     ' structure to hold information about the list
> file
>    FileIndex As Integer
>    filename(MAXNAME) As Byte
>    FileNum As Integer
>    FileIcon As Integer
> End Type
>
> I am writing a new VB.NET program that will use the same DLL that was
> used by the VB6 program, but I have had to update the data type to be a
> structure:
>
>   Public Structure ListInfo     ' structure to hold information about
> the list file
>        Dim FileIndex As Short
>        Dim filename() As Byte
>        Dim FileNum As Short
>        Dim FileIcon As Short
>    End Structure
>    'integers made Shorts b/c of Int size change
>
> My DLL does not like the new data type.  Does anyone know of a solution?

\\\
Imports System.Runtime.InteropServices

Public Structure ListInfo
    Public FileIndex As Short
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=MAXNAME)> _
    Public filename() As Byte
    Public FileNum As Short
    Public FileIcon As Short
End Structure
///

--
M S   Herfried K. Wagner
M V P  <URL:http://dotnet.mvps.org/>
V B   <URL:http://classicvb.org/petition/>