Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Подключение к интернету через GPRS 
V
    Опции темы
0000
Дата 20.6.2007, 09:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 208
Регистрация: 11.7.2006
Где: Нижний Новгород

Репутация: 1
Всего: 5



под WM5
сию проблему я уже давно встречал в нете, много перечитал по ней, однако остались вопросы. Надо автоматически подключить телефон к инету (GPRS), передать файлик на ftp и отрубиться...
нашел кучу материалов про Connection Manager (в MSDN подробно описан), почитал, попробовал...все вроде получалось... (замена bool на int некоторых переменных - вообще забавная вещь)
и тут вышла проблема...при установленном соединении мой мелкий ftp-клиент благополучно все передает (с использованием сокетов)...
а вот при коннекте какие-то проблемы...
Guid выбирается правильно, все этапы вроде проходят, однако после появления буковки e на смарте (мол инет подключился) прога благополучно виснет....иногда получается ее снять через task manager, иногда нет...но факт - файло тормозит, прога зависает....
везде смотрел - все выбирается верно, все методы отрабатывают....
может кто с таким сталкивался...
я просто уже не понимаю, все вроде цивильно...я приведу тока ту часть, где сам коннект

Код

public static unsafe bool EnumDestinations(int nIndex, out Guid guid, out string description, out int error)
        {
            int rezult;
            CONNMGR_DESTINATION_INFO connMgrDestinationInfo = new CONNMGR_DESTINATION_INFO();
            fixed (char* pDescription = new char[129]) //фиксируем от GC
            {
                connMgrDestinationInfo.guid = Guid.Empty;
                connMgrDestinationInfo.szDescription = pDescription;
                rezult = CONNMGR_CONNECTIONINFO.ConnMgrEnumDestinations(nIndex, connMgrDestinationInfo);
                error = Marshal.GetLastWin32Error();
                if (rezult == 0)
                {
                    guid = new Guid(connMgrDestinationInfo.guid.ToString());
                    description = new string(pDescription);
                }
                else
                {
                    guid = Guid.Empty;
                    description = "";
                }
            }
            return (rezult == 0) ? true : false;
        }
        public static unsafe IntPtr EstablishConnection(Guid guid)
        {
            CONNMGR_CONNECTIONINFO connectionInfo = new CONNMGR_CONNECTIONINFO();

            connectionInfo.cbSize = Marshal.SizeOf(connectionInfo);
            connectionInfo.dwParams = CONNMGR_PARAM_GUIDDESTNET;
            connectionInfo.dwFlags = 0;
            connectionInfo.dwPriority = CONNMGR_PRIORITY_USERINTERACTIVE;
            connectionInfo.bExclusive = 0;
            connectionInfo.bDisabled = 0;
            connectionInfo.guidDestNet = guid;
            connectionInfo.hWnd = IntPtr.Zero;
            connectionInfo.uMsg = 0;
            connectionInfo.lParam = 0;
            connectionInfo.ulMaxCost = 0;
            connectionInfo.ulMinRcvBw = 0;
            connectionInfo.ulMaxConnLatency = 0;

            IntPtr hConnection = IntPtr.Zero;
            int rezult = CONNMGR_CONNECTIONINFO.ConnMgrEstablishConnection(connectionInfo, out hConnection);
            if (rezult != 0) throw new Exception("ConnMgrEstablishConnection()");
            return hConnection;
        }
        public static unsafe IntPtr Connect()
        {
            int nIndex = 0;
            Guid guid = new Guid();
            string description = null;
            int error = 0;
            IntPtr hConnection = IntPtr.Zero;
            bool rezult = true;
            while (rezult == true)
            {
                rezult = ConnMgr.EnumDestinations(nIndex, out guid, out description, out error);
                if ((rezult) && (nIndex == 3))
                {
                    hConnection = EstablishConnection(guid);
                }
                nIndex++;
            }
            return hConnection;
        }
        public static unsafe void DisConnect(IntPtr hConnection)
        {
            int rezult = CONNMGR_CONNECTIONINFO.ConnMgrReleaseConnection(hConnection, 0);
            if (rezult != 0) throw new Exception("ConnMgrReleaseConnection()");
        }


и вот как вызваем:

Код

IntPtr hConnection = ConnMgr.Connect();
bool temp = this.ftp.Upload(fileName);
ConnMgr.DisConnect(hConnection);
return temp;


Это сообщение отредактировал(а) 0000 - 20.6.2007, 09:50
PM MAIL ICQ   Вверх
0000
Дата 22.6.2007, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 208
Регистрация: 11.7.2006
Где: Нижний Новгород

Репутация: 1
Всего: 5



как я погляжу - тему много кто просматривал, однако ответов нету...
я разобрался с ситуацией, так что все нормуль...
PM MAIL ICQ   Вверх
0000
Дата 25.6.2007, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 208
Регистрация: 11.7.2006
Где: Нижний Новгород

Репутация: 1
Всего: 5



ежели кому надо - скажите, я кину

Это сообщение отредактировал(а) 0000 - 25.6.2007, 16:03
PM MAIL ICQ   Вверх
stab
Дата 25.6.2007, 18:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: 1
Всего: 48



кидай на форум, интересно глянуть и в будущем может кому-нибудь понадобиться.


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
0000
Дата 27.6.2007, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 208
Регистрация: 11.7.2006
Где: Нижний Новгород

Репутация: 1
Всего: 5



короче так..
вот версия коннекта, которую путем поисков в инете и мсдне удалось собрать...может кто увидит свое, знакомое - но тут ничего сугубо особенного и изощренного нет...
итак...
CONNMGR_CONNECTIONINFO

Код

    public unsafe class CONNMGR_CONNECTIONINFO
    {
        public int cbSize = 0x40; // Размер структуры
        public int dwParams = 0; // Флажки доступных полей
        public int dwFlags = 0; // Флажки свойств соединения
        public int dwPriority = 0; // Приоритет соединения
        public int bExclusive = 0; // Полный захват соединения приложением
        public int bDisabled = 0; // Соединение блокировано
        public Guid guidDestNet = Guid.Empty; // GUID соединения
        public IntPtr hWnd = IntPtr.Zero; // Окно для отображения статуса соединения
        public int uMsg = 0; // ID Message изменения состояния окна соединения
        public int lParam = 0; // lParam при сообщениях окну соединения
        public int ulMaxCost = 0;
        public int ulMinRcvBw = 0;
        public int ulMaxConnLatency = 0;

        [DllImport("cellcore.dll", CharSet = CharSet.Unicode, SetLastError = true, CallingConvention = CallingConvention.Winapi)]
        internal unsafe static extern int ConnMgrEnumDestinations(int nIndex, CONNMGR_DESTINATION_INFO pConnInfo);

        [DllImport("cellcore.dll", CharSet = CharSet.Unicode, SetLastError = true, CallingConvention = CallingConvention.Winapi)]
        internal unsafe static extern int ConnMgrReleaseConnection(IntPtr hConnection, int bCache);

        [DllImport("cellcore.dll", CharSet = CharSet.Unicode, SetLastError = true)]
        internal unsafe static extern int ConnMgrEstablishConnectionSync(CONNMGR_CONNECTIONINFO pConnInfo, out IntPtr hConn, uint timeout, uint* status);

        [DllImport("cellcore.dll", CharSet = CharSet.Unicode, SetLastError = true)]
        internal unsafe static extern int ConnMgrConnectionStatus(IntPtr hConnection, uint* status);
    }


CONNMGR_DESTINATION_INFO

Код

public unsafe class CONNMGR_DESTINATION_INFO
    {
        public Guid guid = Guid.Empty;
        public char* szDescription = null;
    }



ConnMgr

Код

public class ConnMgr
    {
        internal const int CONNMGR_PARAM_GUIDDESTNET = 0x1; // guidDestNet - доступен
        internal const int CONNMGR_PARAM_MAXCOST = 0x2; // ulMaxCost - доступен
        internal const int CONNMGR_PARAM_MINRCVBW = 0x4; // ulMinRcvBw - доступен
        internal const int CONNMGR_PARAM_MAXCONNLATENCY = 0x8;
        internal const int CONNMGR_FLAG_PROXY_HTTP = 0x1; // HTTP Proxy
        internal const int CONNMGR_FLAG_PROXY_WAP = 0x2; // WAP Proxy (gateway)
        internal const int CONNMGR_FLAG_PROXY_SOCKS4 = 0x4; // SOCKS4 Proxy
        internal const int CONNMGR_FLAG_PROXY_SOCKS5 = 0x8; // SOCKS5 Proxy
        internal const int CONNMGR_PRIORITY_VOICE = 0x20000; // Для голосового соединения
        internal const int CONNMGR_PRIORITY_USERINTERACTIVE = 0x08000; // Соединение актуально для пользователя
        internal const int CONNMGR_PRIORITY_USERBACKGROUND = 0x02000; //
        internal const int CONNMGR_PRIORITY_USERIDLE = 0x00800; //
        internal const int CONNMGR_PRIORITY_HIPRIBKGND = 0x00200; //
        internal const int CONNMGR_PRIORITY_IDLEBKGND = 0x00080; //
        internal const int CONNMGR_PRIORITY_EXTERNALINTERACTIVE = 0x00020; //
        internal const int CONNMGR_PRIORITY_LOWBKGND = 0x00008; //
        internal const int CONNMGR_PRIORITY_CACHED = 0x00002; //

        // Состояние соединения
        internal const int CONNMGR_STATUS_UNKNOWN = 0x00; // Неизвестное состояние
        internal const int CONNMGR_STATUS_CONNECTED = 0x10; // Соединение есть
        internal const int CONNMGR_STATUS_DISCONNECTED = 0x20; // Соединение разорвано
        internal const int CONNMGR_STATUS_CONNECTIONFAILED = 0x21; // Соединение разорвано и не может быть востановлено
        internal const int CONNMGR_STATUS_CONNECTIONCANCELED = 0x22; // Пользователь разорвал соединение
        internal const int CONNMGR_STATUS_CONNECTIONDISABLED = 0x23; // Соединение заблокировано
        internal const int CONNMGR_STATUS_NOPATHTODESTINATION = 0x24; // Не найден путь доставки
        internal const int CONNMGR_STATUS_WAITINGFORPATH = 0x25; // Ожидание пути доставки
        internal const int CONNMGR_STATUS_WAITINGFORPHONE = 0x26; // Голосовой разговор
        internal const int CONNMGR_STATUS_WAITINGCONNECTION = 0x40; // Попытка соединения
        internal const int CONNMGR_STATUS_WAITINGFORRESOURCE = 0x41; // Соединение используется другой программой
        internal const int CONNMGR_STATUS_WAITINGFORNETWORK = 0x42; // 
        internal const int CONNMGR_STATUS_WAITINGDISCONNECTION = 0x80; // Ожидание разрыва соединения
        internal const int CONNMGR_STATUS_WAITINGCONNECTIONABORT = 0x81; //

        public ConnMgr()
        {
        }
        private static unsafe bool EnumDestinations(int nIndex, out Guid guid, out string description, out int error)
        {
            int rezult;
            CONNMGR_DESTINATION_INFO connMgrDestinationInfo = new CONNMGR_DESTINATION_INFO();
            fixed (char* pDescription = new char[129]) //фиксируем от GC
            {
                connMgrDestinationInfo.guid = Guid.Empty;
                connMgrDestinationInfo.szDescription = pDescription;
                rezult = CONNMGR_CONNECTIONINFO.ConnMgrEnumDestinations(nIndex, connMgrDestinationInfo);
                error = Marshal.GetLastWin32Error();
                if (rezult == 0)
                {
                    guid = new Guid(connMgrDestinationInfo.guid.ToString());
                    description = new string(pDescription);
                }
                else
                {
                    guid = Guid.Empty;
                    description = "";
                }
            }
            return (rezult == 0) ? true : false;
        }
        private static unsafe IntPtr EstablishConnection(Guid guid)
        {
            new Log().WriteLog("ConnMgr.EstablishConnection(Guid) start");
            CONNMGR_CONNECTIONINFO connectionInfo = new CONNMGR_CONNECTIONINFO();

            connectionInfo.cbSize = Marshal.SizeOf(connectionInfo);
            connectionInfo.dwParams = CONNMGR_PARAM_GUIDDESTNET;
            connectionInfo.dwFlags = 0;
            connectionInfo.dwPriority = CONNMGR_PRIORITY_USERINTERACTIVE;
            connectionInfo.bExclusive = 0;
            connectionInfo.bDisabled = 0;
            connectionInfo.guidDestNet = guid;
            connectionInfo.hWnd = IntPtr.Zero;
            connectionInfo.uMsg = 0;
            connectionInfo.lParam = 0;
            connectionInfo.ulMaxCost = 0;
            connectionInfo.ulMinRcvBw = 0;
            connectionInfo.ulMaxConnLatency = 0;

            IntPtr hConnection = IntPtr.Zero;
            int rezult = CONNMGR_CONNECTIONINFO.ConnMgrEstablishConnection(connectionInfo, out hConnection);
            if (rezult != 0) new Log().WriteLog("ConnMgrEstablishConnection(Guid) failed");
            else new Log().WriteLog("ConnMgr.EstablishConnection(Guid) success");
            return hConnection;
        }
        public static unsafe IntPtr Connect(double timeout)
        {
            new Log().WriteLog("ConnMgr.Connect() start");
            Guid guid = new Guid();
            string description = "";
            int error = 0;
            IntPtr hConnection = IntPtr.Zero;
            new Log().WriteLog("Internet GUID = " + guid.ToString());
            bool rezult = true;
            while (rezult == true)
            {
                rezult = EnumDestinations(nIndex, out guid, out description, out error);
                new Log().WriteLog("Win32Error = " + string.Format("{0:X}", error) + " \\ " + guid.ToString() + " \\ " + description);
                if ((rezult) && (nIndex == 3))
                {
                    new Log().WriteLog("Internet GUID = " + guid.ToString());
                    hConnection = EstablishConnectionSync(guid, timeout);
                }
                nIndex++;
            }
            return hConnection;
        }
        private static unsafe IntPtr EstablishConnectionSync(Guid guid, double timeout)
        {
            CONNMGR_CONNECTIONINFO connectionInfo = new CONNMGR_CONNECTIONINFO();
            connectionInfo.dwParams = CONNMGR_PARAM_GUIDDESTNET;
            connectionInfo.dwPriority = CONNMGR_PRIORITY_USERINTERACTIVE;
            connectionInfo.guidDestNet = guid;
            IntPtr hConnection = IntPtr.Zero;
            uint tout = (uint)(timeout * 1000 + 1);
            uint status = 0;
            int result = CONNMGR_CONNECTIONINFO.ConnMgrEstablishConnectionSync(connectionInfo, out hConnection, tout, &status);
            if (result != 0) new Log().WriteLog("ConnMgrEstablishConnectionSync(Guid, double) failed");
            else new Log().WriteLog("ConnMgrEstablishConnectionSync(Guid, double) success");
            return hConnection;
        }
        public static unsafe void ReleaseConnection(IntPtr hConnection)
        {
            new Log().WriteLog("Disconnect(IntPtr) start");
            int result = CONNMGR_CONNECTIONINFO.ConnMgrReleaseConnection(hConnection, 1);
            if (result != 0) new Log().WriteLog("ConnMgrReleaseConnection(IntPtr) failed");
            else new Log().WriteLog("ConnMgrReleaseConnection(IntPtr) success");
        }

        private static unsafe Guid GuidConnection(int nIndex)
        {
            new Log().WriteLog("GuidConnection(int) start");
            Guid guid = Guid.Empty;
            CONNMGR_DESTINATION_INFO connMgrDestinationInfo = new CONNMGR_DESTINATION_INFO();
            fixed (char* pDescription = new char[129])
            {
                connMgrDestinationInfo.szDescription = pDescription;
                if (CONNMGR_CONNECTIONINFO.ConnMgrEnumDestinations(nIndex, connMgrDestinationInfo) == 0)
                {
                    guid = new Guid(connMgrDestinationInfo.guid.ToString());
                    new Log().WriteLog("GuidConnection(int) success");
                }
                else new Log().WriteLog("GuidConnection(int) failed");
            }
            return guid;
        }
    }


тут еще приведены куча констант состояния подключения - их тоже можно использовать уже кому как нравится, поэтому реализацию какую-нибудь я сюда не приводил...так что вот....
если кому понадобится - берите..и спасибо всем, кто помог с эти мне на разных форумах!!!
PM MAIL ICQ   Вверх
stab
Дата 28.6.2007, 00:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: 1
Всего: 48



и тебе спасибо, такую глыбу своял ;)


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
Ukrandruha
Дата 19.11.2008, 22:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 10.10.2008

Репутация: нет
Всего: нет



Может кто сталкивался с проблемой.... Есть такая компонента как NetDial от ипворкс , при диалапе  она делает тоже самое что в сабже, Но при подключении ни одна Connection Manager Application его не видит :( есть только хендл соединения, может кто знает как менеджеру подсунуть уже готовое соединение, что бы он его раздавал на Connection Manager Application?
PM MAIL   Вверх
StepanBorovikov
Дата 2.4.2009, 09:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 22.11.2008

Репутация: нет
Всего: нет



Добрый день а с VB.NET не поможите?

Пишу прогу для КПК задача проги:

1. Считать со встроенного GPS приемника текущие координаты.
2. Передать координаты и идентификационные данные на сервер (мой сервер в сети с выделенным IP)

С пунктом №1 проблем нет.

А вот со вторым предостаточно.
Проблемы:
1. Не могу заставить телефон поднять соединение GPRS.
Код

Imports System.Runtime.InteropServices
Public Class Form1
    Private Const CONNMGR_PARAM_GUIDDESTNET = &H1 ' guidDestNet - доступен
    Private Const CONNMGR_PARAM_MAXCOST = &H2 ' ulMaxCost - доступен
    Private Const CONNMGR_PARAM_MINRCVBW = &H4 ' ulMinRcvBw - доступен
    Private Const CONNMGR_PARAM_MAXCONNLATENCY = &H8
    Private Const CONNMGR_FLAG_PROXY_HTTP = &H1 ' HTTP Proxy
    Private Const CONNMGR_FLAG_PROXY_WAP = &H2  ' WAP Proxy (gateway)
    Private Const CONNMGR_FLAG_PROXY_SOCKS4 = &H4 ' SOCKS4 Proxy
    Private Const CONNMGR_FLAG_PROXY_SOCKS5 = &H8 ' SOCKS5 Proxy
    Private Const CONNMGR_PRIORITY_VOICE = &H20000 ' Для голосового соединения
    Private Const CONNMGR_PRIORITY_USERINTERACTIVE = &H8000 ' Соединение актуально для пользователя
    Private Const CONNMGR_PRIORITY_USERBACKGROUND = &H2000
    Private Const CONNMGR_PRIORITY_USERIDLE = &H800
    Private Const CONNMGR_PRIORITY_HIPRIBKGND = &H200
    Private Const CONNMGR_PRIORITY_IDLEBKGND = &H80
    Private Const CONNMGR_PRIORITY_EXTERNALINTERACTIVE = &H20
    Private Const CONNMGR_PRIORITY_LOWBKGND = &H8
    Private Const CONNMGR_PRIORITY_CACHED = &H2

    'Состояние соединения
    Private Const CONNMGR_STATUS_UNKNOWN = &H0 ' Неизвестное состояние
    Private Const CONNMGR_STATUS_CONNECTED = &H10 ' Соединение есть
    Private Const CONNMGR_STATUS_DISCONNECTED = &H20 ' Соединение разорвано
    Private Const CONNMGR_STATUS_CONNECTIONFAILED = &H21 ' Соединение разорвано и не может быть востановлено
    Private Const CONNMGR_STATUS_CONNECTIONCANCELED = &H22 ' Пользователь разорвал соединение
    Private Const CONNMGR_STATUS_CONNECTIONDISABLED = &H23 'Соединение заблокировано
    Private Const CONNMGR_STATUS_NOPATHTODESTINATION = &H24 'Не найден путь доставки
    Private Const CONNMGR_STATUS_WAITINGFORPATH = &H25 'Ожидание пути доставки
    Private Const CONNMGR_STATUS_WAITINGFORPHONE = &H26 'Голосовой разговор
    Private Const CONNMGR_STATUS_WAITINGCONNECTION = &H40 ' Попытка соединения
    Private Const CONNMGR_STATUS_WAITINGFORRESOURCE = &H41 ' Соединение используется другой программой
    Private Const CONNMGR_STATUS_WAITINGFORNETWORK = &H42
    Private Const CONNMGR_STATUS_WAITINGDISCONNECTION = &H80 'Ожидание разрыва соединения
    Private Const CONNMGR_STATUS_WAITINGCONNECTIONABORT = &H81

    <DllImport("cellcore.dll")> Private Shared Function ConnMgrConnectionStatus(ByVal hConn As Integer, ByRef iStatus As Integer) As Integer
    End Function
    <DllImport("cellcore.dll")> Private Shared Function ConnMgrEnumDestinations(ByVal DestIndex As Integer, ByRef DestInfo As ConnMgr_ConnectionInfo) As Integer
    End Function
    <DllImport("cellcore.dll")> Private Shared Function ConnMgrMapURL(ByVal URL As String, ByRef NetworkGuid As Guid, ByRef GuidIndex As Integer) As Integer
    End Function
    <DllImport("cellcore.dll")> Private Shared Function ConnMgrEstablishConnectionSync(ByRef ConnInfo As ConnMgr_ConnectionInfo, ByRef ConnHandle As Integer, ByVal Timeout As Integer, ByRef FinalStatus As Integer) As Integer
    End Function
    <DllImport("cellcore.dll")> Private Shared Function ConnMgrEstablishConnection(ByRef ConnInfo As ConnMgr_ConnectionInfo, ByRef phConnection As IntPtr) As Integer
    End Function

    Public Structure ConnMgr_ConnectionInfo
        Public cbSize As Integer 'размер структуры 0х40
        Public dwParams As Integer ' флажки доступных полей 0
        Public dwFlags As Integer ' Флажки свойств соединения 0
        Public dwPriority As Integer 'Приоритет соединения 0
        Public bExclusive As Integer 'Полный захват соединения приложением 0 
        Public bDisabled As Integer 'Соединение блокировано 0
        Public guidDestNet As Guid 'GUID соединения Guid.Empty
        Public hWnd As IntPtr ' Окно для отображения статуса соединения IntPtr.Zero
        Public uMsg As Integer 'Изменения состояния окна соединения 0
        Public lParam As IntPtr 'lParam при сообщениях окну соединения
        Public ulMaxCost As Integer '0
        Public ulMinRcvBw As Integer '0
        Public ulMaxConnLatency As Integer '0
    End Structure
    Private Sub MenuItem1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem1.Click
        MsgBox(EstablishConnection)
    End Sub
    Public Function EstablishConnection() As Integer
        Dim Result As Integer
        Dim IntPtrVar As IntPtr
        Dim ConnInfo As ConnMgr_ConnectionInfo
        ConnInfo.cbSize = &H40
        ConnInfo.dwParams = &H0
        ConnInfo.dwFlags = &H0
        ConnInfo.dwPriority = &H0
        ConnInfo.bExclusive = &H0
        ConnInfo.bDisabled = &H0
        ConnInfo.guidDestNet = Guid.Empty
        ConnInfo.hWnd = IntPtr.Zero
        ConnInfo.uMsg = &H0
        ConnInfo.lParam = &H0
        ConnInfo.ulMaxCost = &H0
        ConnInfo.ulMinRcvBw = &H0
        ConnInfo.ulMaxConnLatency = &H0
        IntPtrVar = IntPtr.Zero
        Try
            Result = ConnMgrEstablishConnection(ConnInfo, IntPtrVar)
            MsgBox("Результат ConnMgrEstablishConnection =  " & Result)
        Catch ex As Exception
            MsgBox("Совсем все плохо.")
        End Try
    End Function
End Class

При вызове Result = ConnMgrEstablishConnection(ConnInfo, IntPtrVar)
возвращается  код -2147024809

Читал про ошибку говорят тип переменных bExclusive  и bDisabled  не верный якобы должен быть Integer 
у меня он такой и есть.

Пытался разобраться в вышем коде, не вышло так как я с NET только начинаю знакомиться. 


Что я не так делаю?

Заранее благодарю.


Это сообщение отредактировал(а) StepanBorovikov - 2.4.2009, 09:20
PM MAIL   Вверх
Serjaru
Дата 2.9.2010, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 1.11.2008

Репутация: нет
Всего: нет



Цитата(0000 @ 27.6.2007,  10:47)
короче так..
вот версия коннекта, которую путем поисков в инете и мсдне удалось собрать...может кто увидит свое, знакомое - но тут ничего сугубо особенного и изощренного нет...
итак...
CONNMGR_CONNECTIONINFO

Код

    public unsafe class CONNMGR_CONNECTIONINFO
    {
        public int cbSize = 0x40; // Размер структуры
        public int dwParams = 0; // Флажки доступных полей
        public int dwFlags = 0; // Флажки свойств соединения
        public int dwPriority = 0; // Приоритет соединения
        public int bExclusive = 0; // Полный захват соединения приложением
        public int bDisabled = 0; // Соединение блокировано
        public Guid guidDestNet = Guid.Empty; // GUID соединения
        public IntPtr hWnd = IntPtr.Zero; // Окно для отображения статуса соединения
        public int uMsg = 0; // ID Message изменения состояния окна соединения
        public int lParam = 0; // lParam при сообщениях окну соединения
        public int ulMaxCost = 0;
        public int ulMinRcvBw = 0;
        public int ulMaxConnLatency = 0;

        [DllImport("cellcore.dll", CharSet = CharSet.Unicode, SetLastError = true, CallingConvention = CallingConvention.Winapi)]
        internal unsafe static extern int ConnMgrEnumDestinations(int nIndex, CONNMGR_DESTINATION_INFO pConnInfo);

        [DllImport("cellcore.dll", CharSet = CharSet.Unicode, SetLastError = true, CallingConvention = CallingConvention.Winapi)]
        internal unsafe static extern int ConnMgrReleaseConnection(IntPtr hConnection, int bCache);

        [DllImport("cellcore.dll", CharSet = CharSet.Unicode, SetLastError = true)]
        internal unsafe static extern int ConnMgrEstablishConnectionSync(CONNMGR_CONNECTIONINFO pConnInfo, out IntPtr hConn, uint timeout, uint* status);

        [DllImport("cellcore.dll", CharSet = CharSet.Unicode, SetLastError = true)]
        internal unsafe static extern int ConnMgrConnectionStatus(IntPtr hConnection, uint* status);
    }


CONNMGR_DESTINATION_INFO

Код

public unsafe class CONNMGR_DESTINATION_INFO
    {
        public Guid guid = Guid.Empty;
        public char* szDescription = null;
    }



ConnMgr

Код

public class ConnMgr
    {
        internal const int CONNMGR_PARAM_GUIDDESTNET = 0x1; // guidDestNet - доступен
        internal const int CONNMGR_PARAM_MAXCOST = 0x2; // ulMaxCost - доступен
        internal const int CONNMGR_PARAM_MINRCVBW = 0x4; // ulMinRcvBw - доступен
        internal const int CONNMGR_PARAM_MAXCONNLATENCY = 0x8;
        internal const int CONNMGR_FLAG_PROXY_HTTP = 0x1; // HTTP Proxy
        internal const int CONNMGR_FLAG_PROXY_WAP = 0x2; // WAP Proxy (gateway)
        internal const int CONNMGR_FLAG_PROXY_SOCKS4 = 0x4; // SOCKS4 Proxy
        internal const int CONNMGR_FLAG_PROXY_SOCKS5 = 0x8; // SOCKS5 Proxy
        internal const int CONNMGR_PRIORITY_VOICE = 0x20000; // Для голосового соединения
        internal const int CONNMGR_PRIORITY_USERINTERACTIVE = 0x08000; // Соединение актуально для пользователя
        internal const int CONNMGR_PRIORITY_USERBACKGROUND = 0x02000; //
        internal const int CONNMGR_PRIORITY_USERIDLE = 0x00800; //
        internal const int CONNMGR_PRIORITY_HIPRIBKGND = 0x00200; //
        internal const int CONNMGR_PRIORITY_IDLEBKGND = 0x00080; //
        internal const int CONNMGR_PRIORITY_EXTERNALINTERACTIVE = 0x00020; //
        internal const int CONNMGR_PRIORITY_LOWBKGND = 0x00008; //
        internal const int CONNMGR_PRIORITY_CACHED = 0x00002; //

        // Состояние соединения
        internal const int CONNMGR_STATUS_UNKNOWN = 0x00; // Неизвестное состояние
        internal const int CONNMGR_STATUS_CONNECTED = 0x10; // Соединение есть
        internal const int CONNMGR_STATUS_DISCONNECTED = 0x20; // Соединение разорвано
        internal const int CONNMGR_STATUS_CONNECTIONFAILED = 0x21; // Соединение разорвано и не может быть востановлено
        internal const int CONNMGR_STATUS_CONNECTIONCANCELED = 0x22; // Пользователь разорвал соединение
        internal const int CONNMGR_STATUS_CONNECTIONDISABLED = 0x23; // Соединение заблокировано
        internal const int CONNMGR_STATUS_NOPATHTODESTINATION = 0x24; // Не найден путь доставки
        internal const int CONNMGR_STATUS_WAITINGFORPATH = 0x25; // Ожидание пути доставки
        internal const int CONNMGR_STATUS_WAITINGFORPHONE = 0x26; // Голосовой разговор
        internal const int CONNMGR_STATUS_WAITINGCONNECTION = 0x40; // Попытка соединения
        internal const int CONNMGR_STATUS_WAITINGFORRESOURCE = 0x41; // Соединение используется другой программой
        internal const int CONNMGR_STATUS_WAITINGFORNETWORK = 0x42; // 
        internal const int CONNMGR_STATUS_WAITINGDISCONNECTION = 0x80; // Ожидание разрыва соединения
        internal const int CONNMGR_STATUS_WAITINGCONNECTIONABORT = 0x81; //

        public ConnMgr()
        {
        }
        private static unsafe bool EnumDestinations(int nIndex, out Guid guid, out string description, out int error)
        {
            int rezult;
            CONNMGR_DESTINATION_INFO connMgrDestinationInfo = new CONNMGR_DESTINATION_INFO();
            fixed (char* pDescription = new char[129]) //фиксируем от GC
            {
                connMgrDestinationInfo.guid = Guid.Empty;
                connMgrDestinationInfo.szDescription = pDescription;
                rezult = CONNMGR_CONNECTIONINFO.ConnMgrEnumDestinations(nIndex, connMgrDestinationInfo);
                error = Marshal.GetLastWin32Error();
                if (rezult == 0)
                {
                    guid = new Guid(connMgrDestinationInfo.guid.ToString());
                    description = new string(pDescription);
                }
                else
                {
                    guid = Guid.Empty;
                    description = "";
                }
            }
            return (rezult == 0) ? true : false;
        }
        private static unsafe IntPtr EstablishConnection(Guid guid)
        {
            new Log().WriteLog("ConnMgr.EstablishConnection(Guid) start");
            CONNMGR_CONNECTIONINFO connectionInfo = new CONNMGR_CONNECTIONINFO();

            connectionInfo.cbSize = Marshal.SizeOf(connectionInfo);
            connectionInfo.dwParams = CONNMGR_PARAM_GUIDDESTNET;
            connectionInfo.dwFlags = 0;
            connectionInfo.dwPriority = CONNMGR_PRIORITY_USERINTERACTIVE;
            connectionInfo.bExclusive = 0;
            connectionInfo.bDisabled = 0;
            connectionInfo.guidDestNet = guid;
            connectionInfo.hWnd = IntPtr.Zero;
            connectionInfo.uMsg = 0;
            connectionInfo.lParam = 0;
            connectionInfo.ulMaxCost = 0;
            connectionInfo.ulMinRcvBw = 0;
            connectionInfo.ulMaxConnLatency = 0;

            IntPtr hConnection = IntPtr.Zero;
            int rezult = CONNMGR_CONNECTIONINFO.ConnMgrEstablishConnection(connectionInfo, out hConnection);
            if (rezult != 0) new Log().WriteLog("ConnMgrEstablishConnection(Guid) failed");
            else new Log().WriteLog("ConnMgr.EstablishConnection(Guid) success");
            return hConnection;
        }
        public static unsafe IntPtr Connect(double timeout)
        {
            new Log().WriteLog("ConnMgr.Connect() start");
            Guid guid = new Guid();
            string description = "";
            int error = 0;
            IntPtr hConnection = IntPtr.Zero;
            new Log().WriteLog("Internet GUID = " + guid.ToString());
            bool rezult = true;
            while (rezult == true)
            {
                rezult = EnumDestinations(nIndex, out guid, out description, out error);
                new Log().WriteLog("Win32Error = " + string.Format("{0:X}", error) + " \\ " + guid.ToString() + " \\ " + description);
                if ((rezult) && (nIndex == 3))
                {
                    new Log().WriteLog("Internet GUID = " + guid.ToString());
                    hConnection = EstablishConnectionSync(guid, timeout);
                }
                nIndex++;
            }
            return hConnection;
        }
        private static unsafe IntPtr EstablishConnectionSync(Guid guid, double timeout)
        {
            CONNMGR_CONNECTIONINFO connectionInfo = new CONNMGR_CONNECTIONINFO();
            connectionInfo.dwParams = CONNMGR_PARAM_GUIDDESTNET;
            connectionInfo.dwPriority = CONNMGR_PRIORITY_USERINTERACTIVE;
            connectionInfo.guidDestNet = guid;
            IntPtr hConnection = IntPtr.Zero;
            uint tout = (uint)(timeout * 1000 + 1);
            uint status = 0;
            int result = CONNMGR_CONNECTIONINFO.ConnMgrEstablishConnectionSync(connectionInfo, out hConnection, tout, &status);
            if (result != 0) new Log().WriteLog("ConnMgrEstablishConnectionSync(Guid, double) failed");
            else new Log().WriteLog("ConnMgrEstablishConnectionSync(Guid, double) success");
            return hConnection;
        }
        public static unsafe void ReleaseConnection(IntPtr hConnection)
        {
            new Log().WriteLog("Disconnect(IntPtr) start");
            int result = CONNMGR_CONNECTIONINFO.ConnMgrReleaseConnection(hConnection, 1);
            if (result != 0) new Log().WriteLog("ConnMgrReleaseConnection(IntPtr) failed");
            else new Log().WriteLog("ConnMgrReleaseConnection(IntPtr) success");
        }

        private static unsafe Guid GuidConnection(int nIndex)
        {
            new Log().WriteLog("GuidConnection(int) start");
            Guid guid = Guid.Empty;
            CONNMGR_DESTINATION_INFO connMgrDestinationInfo = new CONNMGR_DESTINATION_INFO();
            fixed (char* pDescription = new char[129])
            {
                connMgrDestinationInfo.szDescription = pDescription;
                if (CONNMGR_CONNECTIONINFO.ConnMgrEnumDestinations(nIndex, connMgrDestinationInfo) == 0)
                {
                    guid = new Guid(connMgrDestinationInfo.guid.ToString());
                    new Log().WriteLog("GuidConnection(int) success");
                }
                else new Log().WriteLog("GuidConnection(int) failed");
            }
            return guid;
        }
    }


тут еще приведены куча констант состояния подключения - их тоже можно использовать уже кому как нравится, поэтому реализацию какую-нибудь я сюда не приводил...так что вот....
если кому понадобится - берите..и спасибо всем, кто помог с эти мне на разных форумах!!!

Не работает и не полный код!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
cully
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, cully, mr.DUDA, Exception.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Распределённые приложения и сеть | Следующая тема »


 




[ Время генерации скрипта: 0.1038 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.