By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
455,467 Members | 1,594 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 455,467 IT Pros & Developers. It's quick & easy.

C# Wrapper

P: n/a
Gentlemen Good Day,

I am trying to write a C# class wrapper for Cisco's VPN Client API which
they provide a VPNAPI.h. I am trying to wrap the header definitions so that
I may be able to use their VPNAPI.DLL.

So here is a little summary:

//////////////////////////////////
/// THE EASY PART ///
/////////////////////////////////
A bunch of definitions transformation and convertion
C++
//! API version number
#define VPNAPI_VERSION 0x00010000

C#
/// <summary>
/// API version number
/// </summary>
public enum VPNAPI_VERSION : uint
{
VPNAPI_VERSION =0x00010000 // Version
}

Some structures
C++
struct vpn_connect_error
{
vpn_error_t error;
uint32_t is_remote;
char * delete_reason;

uint32_t reserved[2];
};

C#
[StructLayout(LayoutKind.Sequential,CharSet=CharSet .Auto)]
public class vpn_connect_error
{
public System.UInt32 error;
public System.UInt32 is_remote;
public StringBuilder delete_reason;

[MarshalAs(UnmanagedType.ByValArray, SizeConst=(int)2)]
public System.UInt32[] reserved;
};

Function calls:
C++
DLL_EXPORT_NAME vpn_error_t vpn_api_init(uint32_t * version);

C#
[DllImport("vpnapi.dll",CharSet=CharSet.Auto)]
public extern static vpn_error_t vpn_api_init(System.UIntPtr version);

//////////////////////////////////
/// THE HARD PART ///
/////////////////////////////////
Now here is something I need some assistance:
///////////////////////////////////////////////////////
//! return type for most functions
typedef int32_t vpn_error_t;
///////////////////////////////////////////////////////
//! Possible states for a VPN connection.
typedef enum
{
VPN_MIN_STATE = -1,
VPN_STATE_IDLE,
// delete some states to save place
VPN_STATE_CONNECTED,
VPN_MAX_STATE,
} vpn_state_t;
///////////////////////////////////////////////////////
typedef union
{
struct
{
uint32_t pad[3];
//! IP address in network order
struct in_addr addr; //in_addr declared in winsock.h
} ipv4;

#ifdef NOT_IMPLEMENTED
struct
{
struct in6_addr addr;
} ipv6;
#endif
} vpn_ip_addr_t;
///////////////////////////////////////////////////////
struct vpn_connect_error
{
vpn_error_t error;
uint32_t is_remote;
char * delete_reason;
uint32_t reserved[2];
};
///////////////////////////////////////////////////////
typedef void (*vpn_state_change_cb) (vpn_state_t state, const vpn_ip_addr_t
* peer, const struct vpn_connect_error*);
///////////////////////////////////////////////////////
typedef void *vpn_channel_t;
///////////////////////////////////////////////////////
struct vpn_callback_table
{
//-- deleted some callbacks to save place
//! state change callback
vpn_state_change_cb fp_state_change;
};
///////////////////////////////////////////////////////
DLL_EXPORT_NAME vpn_error_t vpn_channel_init(vpn_channel_t * channel,
uint32_t * msgtypes, const struct vpn_callback_table *callbacks);
///////////////////////////////////////////////////////

If you can help me figure out these few lines of C language code and wrap it
in a C# class I will truly love you... I have been stuck on this parts for a
week now and I would love some help at this point.

You comments are welcome.

Yama Kamyar
Mar 28 '06 #1
Share this question for a faster answer!
Share on Google+

This discussion thread is closed

Replies have been disabled for this discussion.