I am trying to get a C DLL to work with VB.NET 2005. Below is the original
header, my conversion, and test code. There is no error, but
RVERSION_RESP.version returns empty. I must be missing something. Thanks
in advance for any help.
#define REQUEST_DECLINED -2
typedef struct rversion_parms_set_1 RVERSION_PARMS;
typedef struct rversion_resp_set_1 RVERSION_RESP;
#pragma pack(1)
struct rversion_parms_set_1
{
int size; /* REQUIRED Size of structure */
};
struct rversion_resp_set_1
{
int size; /* REQUIRED Size of structure */
int return_code; /* = 0 if no error, != 0 if error */
char return_text[200]; /* Contains error text if return code != 0 */
char version[11]; /* DLL version */
};
#pragma pack()
_declspec(dllexport) extern void rversion(RVERSION_PARMS *rversion_parms,
RVERSION_RESP *rversion_resp);
Module Module1
Public Structure TRVERSION_PARMS
Dim size As Integer ' REQUIRED Size of structure
End Structure
Public Structure TRVERSION_RESP
Dim size As Short ' REQUIRED Size of structure
Dim return_code As Short ' 0 if ( no error, != 0 if ( error
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=200)> _
Dim return_text() As Char ' Contains error text if return code !=
0
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=11)> _
Dim version() As Char ' DLL version
End Structure
Public RVERSION_PARMS As TRVERSION_PARMS
Public RVERSION_RESP As TRVERSION_RESP
Public Declare Function rversion Lib "c:\remotapi.dll" (ByRef
RVERSION_PARMS As TRVERSION_PARMS, ByRef RVERSION_RESP As TRVERSION_RESP) As
Integer
End Module
Test
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
RVERSION_PARMS.size = Marshal.SizeOf(RVERSION_PARMS)
RVERSION_RESP.size = Marshal.SizeOf(RVERSION_RESP)
rversion(RVERSION_PARMS, RVERSION_RESP)
If (RVERSION_RESP.return_code <> 0) Then
TextBox1.Text = "RVERSION ERROR: " & RVERSION_RESP.return_text
Else
TextBox1.Text = "RVERSION: " & RVERSION_RESP.version
End If
End Sub