cs_rebelmind
Messages postés6Date d'inscriptionjeudi 14 octobre 2004StatutMembreDernière intervention 4 août 2005
-
1 août 2005 à 13:20
cudenetf -
13 févr. 2009 à 16:56
Bonjour tout le monde.
J'essaye depuis plusieurs jours d'implementer dans un prog C# l'utilisation des connexions modem!
en vain... je voudrais simplement à partir d'un numero de telephone FAI et d'un login et mot de passe
me connecter
j'ai essayer d'utiliser l'API rasapi32.dll :
[
DllImport(
"rasapi32.dll")]
public
extern
static
long RasDial(
long lpRasDialExtensions,
string lpszPhonebook,
RasDialParams lpRasDialParams,
long dwNotifierType,
object lpvNotifier,
long lphRasConn);
public
struct
RasDialParams
{
public
int dwSize;
public
string szEntryName;
public
string szPhoneNumber;
public
string szCallbackNumber;
public
string szUserName;
public
string szPassword;
public
string szDomain;
}
public
long Dial(
string Connection,
string Username,
string Password)
{
public
static
extern
uint RasDial(
int lpRasDialExtensions,
string lpszPhonebook,
ref
RASDIALPARAMS lprasdialparams,
int dwNotifierType,
Callback lpvNotifier,
ref
int lphRasConn);
Lutinore
Messages postés3246Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention27 octobre 201241 1 août 2005 à 15:19
Tu dois aussi marshaler les chaines de ta structure, pour utiliser une fonction non managée il faut bien comprendre PInvoke sinon tu t'exposes à des problèmes, voir des pertes de mémoire, si tu es débutant en C# c'est pas vraiment une bonne idée de commencer par ca : )
cs_rebelmind
Messages postés6Date d'inscriptionjeudi 14 octobre 2004StatutMembreDernière intervention 4 août 2005 1 août 2005 à 15:52
Je n'ai pas le choix, ce projet repond a un besoin de ma societe.
je l'ai proposé en C# pour me former à ce langage!
le but est de stocker les infos des connections clients dans un fichier, les appeller quand on veut les utiliser, realiser une connection RAS classique (tel, login, mdp) et venir modifier la table de routage une fois connecté pour dissocier la connection Modem (VPN) et l'ADSL (pour internet).
Lutinore
Messages postés3246Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention27 octobre 201241 1 août 2005 à 16:23
Bidou, j'ai dit la même chose la première fois que je suis tombé dessus ! : )
RebelMind, vi mais c'est quand même dommage de bosser sur un projet en .NET et d'utiliser pratiquement que des fonctions non managées, tu perds le bénéfice du code managé, bon courage, si y'a un truc que tu ne comprends pas avec PInvoke, on est là..
Lutinore
Messages postés3246Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention27 octobre 201241 1 août 2005 à 17:44
Nan, je pensais que la fonction attendait une chaine vide mais ce n'est pas ca. Je connais pas cette API donc je peux pas te dire si tu passes les bons paramètres, mais apparemment je ne vois pas de problème avec PInvoke.
cs_nadjim
Messages postés24Date d'inscriptionmardi 18 décembre 2001StatutMembreDernière intervention29 avril 2010 4 janv. 2006 à 16:53
Bonjour ce code est très interressant mais j'aurai besoin d'énumerer toutes les connexions actives du PC. Pour cela j'utilise RasEnumEntries.
int cb Marshal.SizeOf(typeof(RASENTRYNAME)), entries 0;
RASENTRYNAME[] entryNames = new RASENTRYNAME[8];
entryNames.Initialize();
entryNames[0].dwSize = Marshal.SizeOf(typeof(RASENTRYNAME));
uint nRet = RasEnumEntries(IntPtr.Zero, IntPtr.Zero, entryNames, ref cb, ref entries);
if (entries == 0) return;
String[] _EntryNames = new string[entries];
entryNames = new RASENTRYNAME[entries];
for (int i = 0; i < entries; i++)
entryNames[i].dwSize = Marshal.SizeOf(typeof(RASENTRYNAME));
nRet = RasEnumEntries(IntPtr.Zero, IntPtr.Zero, entryNames, ref cb, ref entries);
for (int i = 0; i < entries; i++)
{
_EntryNames[i] = entryNames[i].szEntryName;
MessageBox.Show(entryNames[i].szEntryName);
}
Le problème est que la fonction RasEnumEntries retourne constament l'erreur 632. Ce qui signifie que la taille de la structure n'est pas correcte. Pourriez vous m'aider merci.
Essaie pour voir et tiens nous au courant. :-)
Sinon n'oublie pas que les membres dwFlags et szPhonebookPath ne sont pas à spécifier sur un système inférieur à Windows 2000.
cs_nadjim
Messages postés24Date d'inscriptionmardi 18 décembre 2001StatutMembreDernière intervention29 avril 2010 5 janv. 2006 à 21:34
"[StructLayout(LayoutKind.Sequential, Pack = 4, CharSet = CharSet.Auto)]"
Je dirais plutôt
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
voire
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
__________________________________________________
J'avais déjà essayé [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
et là je viens d'essayer [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] mais je trouve toujours la même erreur.