+ ارسال نظر
نمایش نتایج: از 1 به 1 از 1

موضوع: VB برنامه نویسی شبکه و اینترنت در

  1. #1
    مدیرکل انجمنهای نور آسمان vorojax آواتار ها
    تاریخ عضویت
    Jun 2008
    محل سکونت
    همشهری حضرت عشق
    نوشته ها
    7,305
    تشکر
    6
    تشکر شده 0 بار در 0 ارسال

    پیش فرض VB برنامه نویسی شبکه و اینترنت در

    [size=xx-large]
    بخش اول VB برنامه نویسی شبکه و اینترنت در
    TCP/IP مروري بر
    نکته : مطالب زیر تنها در حد یک یادآوري می باشد . اگر اطلاعات کمی در
    دارید به کتابهاي موجود مراجعه کنید . TCP/IP مورد
    قراردادي است براي برقراري ارتباط در شبکه : Protocol پروتکل


    ٧٩
    مجموعه اي از پروتکلهاي ارتباطی مرتبط بهم است که : TCP/IP مدل
    مکانیزمها و سرویسهاي مورد نیاز جهت برقراري ارتباط در اینترنت را
    مهیا می کنند . این مدل شامل 4 لایه است :
    شامل برنامه هاي کاربردي و : Application Layer 1 - لایه کاربرد
    می باشد . Telnet و Pop ،Smtp ،Ftp ،Http پروتکلهایی مثل
    و TCP این لایه شامل دو پروتکل : Transport Layer 2 - لایه انتقال
    وظیفه کنترل رسیدن بسته هاي داده به مقصد TCP است . پروتکل UDP
    داده ها را به بسته هاي کوچکی تقسیم می کند که هر بسته TCP/IP )
    حاوي آدرس فرستنده ، گیرنده و شماره بسته می باشد ) ، تصحیح خطا و
    است با TCP پروتکلی شبیه UDP . مرتب سازي بسته ها را برعهده دارد
    این تفاوت که هیچ ضمانتی براي رسیدن بسته هاي اطلاعاتی در آن وجود
    ندارد و معمولاً در انتقال صوت و ویدئو روي اینتزنت استفاده می شود .
    است که مسئول IP شامل پروتکل : Internet Layer 3 - لایه اینترنت
    مسیریابی بسته هاي اطلاعاتی می باشد .
    شامل بخشی از هسته سیستم : Link Layer 4 - لایه دسترسی به شبکه
    عامل و نیز درایورهاي واسط شبکه براي کار با سخت افزار شبکه می
    باشد .
    سوکت یک ورودي انتزاعی در لایه انتقال : Port و پورت Socket سوکت
    بکار می رود . اغلب TCP/IP می باشد که براي ایجاد ارتباطات مختلف
    استفاده می کنند ، عملیات انتقال UDP و TCP برنامه هاي کاربردي که از
    اطلاعات خود را با ساخت یک سوکت و سپس انجام یکسري عملیات روي
    آن انجام می دهند . این عملیات عبارتند از :
    1 - عملیات کنترلی : شامل اختصاص یک شماره پورت به سوکت ،
    کردن یک ارتباط ، از بین بردن سوکت accpet کردن یا initiate


    ٨٠
    2 - عملیات انتقال داده : شامل نوشتن داده روي سوکت و خواندن داده از
    سوکت
    مربوط به سوکت ، IP 3 - عملیات بررسی وضعیت : مثل پیدا کردن آدرس
    پیدا کردن شماره پورت سوکت و غیره
    پروتکل انتقال داده براي وب است . : HTTP
    پروتکل انتقال فایل روي اینترنت است . : FTP
    که در مطالب قبلی معرفی شد را می توانید از اینجا Region.dll 1 - فایل
    بگیرید .
    در ویژوال بیسیک TAPI
    در ویژوال بیسیک - مقدمه TAPI
    چیست ؟ TAPI
    یک کتابخانه استاندارد براي کار با مودم و Telephony API یا TAPI
    نوشتن برنامه هاي تلفنی می باشد . براي نمونه می توان از برنامه هاي
    Dialup ) شماره گیر تلفن ) ، برنامه شبکه سازي تلفنی ) Phone Dialer
    برنامه تشخیص پالس مودم براي ضبط اطلاعات وارد ، ( Networking
    شده از طرف کاربران و کاربردهاي دیگر در این زمینه نام برد . این
    کتابخانه به شما کمک کمک می کند تا بدون درگیر شدن با برنامه نویسی
    سخت افزار مودم و درایور آن بطور مستقیم بتوانید برنامه هاي کاربردیی
    در این زمینه بنویسید .


    ٨١
    و چگونگی استفاده از TAPI در این سلسه مقالات سعی می کنم تا مفاهیم
    آنرا در ویژوال بیسیک آموزش بدهم
    در ویژوال بیسیک - بخش اول TAPI
    : Microsoft Telephony مروري بر
    امکان مجتمع سازي کامپیوترها با دستگاههاي ارتباطی و Telephony
    شبکه ها را فراهم نموده است . معمولاً دستگاه ارتباطی یک مودم و خط
    شبکه عمومی تلفن سوئیچینگ ) می باشد . ) PSTN ارتباطی نیز شبکه
    عبارتند از : Telephony برخی از کاربردهاي
    Multicast 1 - کنفرانسهاي مالتی مدیا بصورت
    VoIP - 2
    3 - مرکز پاسخ گویی اتوماتیک
    PSTN 4 - تماس تلفنی از طریق کامپیوتر روي شبکه
    را نشان می دهد : Microsoft Telephony دیاگرام زیر معماري


    ٨٢
    !Error
    : TAPI برنامه هاي
    بایستی ابتدا در TAPI براي نوشتن برنامه هاي کاربردي با استفاده از
    مورد سطح سرویسی که می خواهیم ارائه دهیم تصمیم گیري کنیم . براي
    مثال براي نوشتن یک برنامه شماره گیر تلفن نیاز به استفاده کامل از
    نیست و می توان از قابلیتهاي خود ویندوز در این زمینه استفاده TAPI
    در بخشهاي بعدي در مورد سطوح مختلف . ( Assisted Telephony ) کرد
    بیشتر صحبت خواهم کرد . TAPI سرویس در
    TAPI دومین مطلبی که باید مورد توجه قرار داد اینست که می خواهیم از
    ورژن 2 TAPI تفاوت ایندو آنست که . TAPI 3.x 2 استفاده کنیم یا از .x
    است در حالیکه ورژن 3 آن بر مبناي تکنولوژي C برمبناي API یک


    ٨٣
    می باشد . در بخشهاي بعدي مطالب بیشتري در مورد تفاوتهاي این COM
    دو نسخه بیان خواهم کرد .
    عبارتند از : TAPI بخشهاي اصلی یک برنامه کامل
    اتصال به ، TAPI dll کردن load شامل : TAPI Initialization - 1
    و برپاسازي سیستم اطلاع TAPI مذاکره در مورد ورژن ، TAPI Server
    می باشد . event رسانی
    مقداردهی اولیه ، دریافت و کنترل تماسها : Session Control - 2
    دریافت و تنظیم اطلاعات دستگاه : Device Control - 3
    stream تشخیص و یا تولید تونها و ارقام ، کنترل : Media Control - 4
    آزاد سازي منابع : TAPI Shutdown - 5
    دیاگرام زیر این مراحل را بهتر نشان می دهد :


    ٨٤
    !
    در ویژوال بیسیک - بخش دوم TAPI


    ٨٥
    : TAPI مقداردهی اولیه
    نیاز به برپاسازي محیط ارتباطی روي TAPI عملکرد درست اجزاي
    کامپیوتر مورد نظر دارد . مراحل این امر عبارتند از :
    زمانیکه سخت افزار و یا نرم افزار براي اولین بار به : TAPI 1 - نصب
    کامپیوتر اضافه می شود انجام می گیرد . جزئیات کار به سیستم عامل و
    نرم افزار بستگی دارد .
    2 - مقداردهی ابتدائی : ساخت اشیا و مسیرهاي ارتباطی
    TAPI براي اطمینان از اینکه اجزاي : TAPI 3 - مذاکره در مورد ورژن
    قادر به تبادل داده ها باشند .
    4 - استخراج اطلاعات منابع : بدست آوردن اطلاعاتی در مورد دستگاهی
    مورد نظرمان استفاده نمود . TAPI که می توان از آن در برنامه
    event برپاسازي سیستم اطلاع رسانی : Event notification - 5
    در ویژوال بیسیک - بخش سوم TAPI
    در ویژوال بیسیک : TAPI مقداردهی اولیه
    را انتخاب کرده و از لیست References گزینه Project از منوي
    را انتخاب کنید . Microsoft TAPI 3.0 Type Library مربوطه مورد


    ٨٦
    را بصورت objTAPI حال وارد بخش کد نویسی فرمتان شوید و متغیر
    زیر تعریف کنید :
    Dim objTapi As TAPI
    را بصورت زیر objTAPI شی Load Form سپس در بخش مربوط به
    ایجاد می کنیم :
    Set objTapi = New TAPI
    TAPI همانطور که در بخشهاي قبلی گفته شد ، قبل از فراخوانی هر تابع
    ابتدا بایستی آنرا مقداردهی اولیه کنیم . براي مقداردهی اولیه کردن شی
    عبارت زیر را بنویسید : TAPI
    Call objTapi.Initialize
    در ویژوال بیسیک - بخش چهارم TAPI
    انتخاب یک آدرس :
    در TAPI کد زیر نشان می دهد که چگونه می توان با استفاده از شی
    ویژوال بیسیک منابع تلفنی در دسترس را براي یک آدرس که بتواند یک
    مجموعه مشخص از نیازها را مدیریت کند ، بررسی کرد .
    توجه داشته باشید که قبل از انجام این کار بایستی عمل مقداردهی اولیه
    را که در بخش قبل ررسی شد ، انجام دهید . TAPI
    انجام نگرفته است و براي error checking نکته : در کد زیر عمل
    استفاده از کد زیر در برنامه هاي واقعی بایستی بخش بررسی خطا را به


    ٨٧
    آن اضافه کنید .
    1 - تعریف یک شی آدرس و یک شی مجموعه آدرس :
    Dim gobjAddress As ITAddress
    As ITCollection Dim objCollAddresses
    بعنوان یک مجموعه آدرس از شی objCollAddress 2 - تنظیم شی
    : objTapi
    Set objCollAddresses = objTapi.Addresses
    3 - پیدا کردن آدرسی که بتواند از واسط مورد نظر ما پشتیبانی کند :
    bFound = False
    objCollAddresses.Count For indexAddr = 1 To
    objCollAddresses.Item(indexAddr)x = Set objCrtAddress
    Set objMediaSupport = objCrtAddress
    objAddressCapabilities = objCrtAddress Set
    nSelectedType ) x )If objMediaSupport.QueryMediaType
    bFound = True
    End If
    Nothing = Set objAddressCapabilities
    Set objMediaSupport = Nothing
    Nothing = Set objCrtAddress
    If bFound = True Then Exit For
    Next indexAddr


    ٨٨
    در صورتیکه آدرس مورد نظزر پیدا شود برنامه از حلقه خارج شده و
    یک آدرس قابل استفاده خواهد بود : gobjAddress
    objcollAddresses.Item(indexAddr)x = Set gobjAddress
    در ویژوال بیسیک - بخش پنجم TAPI
    : TAPI در Event Handling انجام
    رجیستر کردن ، TAPI ساده براي event handler کد زیر شامل یک
    و رجیستر کردن تمام فراخوانیهاي event تنظیم ***** ، event واسط
    دادن اخطار است . هدف اصلی از این کد اینست که مطمئن شویم بخشی
    ها را دریافت می کند پردازشی را قبل از انتقال به event که TAPI از
    بخشهاي دیگر انجام دهد .
    تعاریفها :
    TAPI Dim WithEvents gobjTapiWithEvents As
    Attribute gobjTapiWithEvents.VB_VarHelpID = -1
    glRegistrationToken As Long Dim
    Const TAPI3_CALL_EVENTS =TE_CALLMEDIA Or
    TE_CALLNOTIFICATION Or TE_CALLSTATE


    ٨٩
    هاي تعریف شده براي event بصورتیکه تمام eventfilter تنظیم
    را بپذیرد : TAPI
    TAPI3_CALL_EVENTS = objTapi.EventFilter
    ها : event رجیستر کردن
    Set gobjTapiWithEvents = objTapi
    Boolean, fMonitor As Boolean Dim fOwner As
    Long Dim lMediaTypes As Long, lCallbackInstance As
    fOwner = True
    fOwner = True
    fMonitor = False
    TAPIMEDIATYPE_AUDIO = lMediaTypes
    lCallbackInstance = 1
    = glRegistrationToken
    ,gobjTapi.RegisterCallNotifications(gobjAddress,fM onitor
    fOwner,lMediaTypes,lCallbackInstance)x
    در ویژوال بیسیک - بخش ششم TAPI
    انتخاب یک ترمینال :
    + قبل از اینکه یک ترمینال را براي برقراري ارتباط انتخاب کنید بایستی
    و عمل انتخاب آدرس را انجام داده باشید . TAPI Initialization


    ٩٠
    واسط کنترل تماس ) ) ITBasicCallControl ابتدا یک متغیر از نوع
    تعریف می کنیم :
    Dim objCallControl As ITBasicCallControl
    objCallControl = gobjReceivedCallInfo Set
    کوئري از شی آدرس ) ITTerminalSupport سپس یک متغیر از نوع
    ) تعریف می کنیم :
    Dim objTerminalSupport As ITTerminalSupport
    objTerminalSupport = gobjAddress Set
    سپس متغیر ترمینال را تعریف کرده و توسط شی
    یک ترمینال را براي آن استخراج می کنیم : objTerminalSupport
    Dim objTerminal As ITTerminal
    = Set objTerminal
    objTerminalSupport.GetDefaultStaticTerminal(lMedia Ty
    pe, dir)x
    نیست بنابراین objTerminalSupport در اینجا دیگر نیازي به شی
    آنرا آزاد می کنیم :
    Set objTerminalSupport = Nothing
    براي کنترل ترمینال objStreamControl سپس نیاز به تعریف شی
    است :


    ٩١
    Dim objStreamControl As ITStreamControl
    objStreamControl = objCallControl Set
    در صورتیکه این شی ایجاد شود ، به ازاي استریم هاي موجود در
    بررسی می شود و for امکان ایجاد ترمینال در یک حلقه ITCollection
    ترمینال مناسب انتخاب می گردد :
    If Not (objStreamControl Is Nothing) Then
    objITCollStreams As ITCollection Dim
    objStreamControl.Streams = Set objITCollStreams
    ITStream Dim nIndex As Long, objCrtStream As
    For nIndex = 1 To objITCollStreams.Count
    objITCollStreams.Item(nIndex)x = Set objCrtStream
    Then If objCrtStream.MediaType = lMediaType
    If objCrtStream.Direction = dir Then
    objCrtStream.SelectTerminal(objTerminal)x Call
    End If
    End If
    objCrtStream = Nothing Set
    Next nIndex
    Nothing = Set objITCollStreams
    Set objStreamControl = Nothing
    End If


    ٩٢
    : ( Make a Call ) ایجاد یک تماس
    و عمل انتخاب TAPI Initialization + قبل از این بخش بایستی مراحل
    آدرس انجام شده باشد .
    این بخش براي ایجاد یک شی تماس ، بررسی و مشخص کردن استریمی
    که با این تماس در ارتباط است ، انتخاب و ایجاد ترمینالهاي مناسب و
    کامل کردن ارتباط استفاده می شود .
    و عمل انتخاب آدرس و انتخاب ترمینال TAPI Initialization قبل
    انجام شده باشد .
    یک شی تماس ساخته می شود : CreateCall در ابتدا با استفاده از متد
    = Set gobjCall
    ,gobjOrigAddress.CreateCall(strDestAddress
    nSelectedType,lMediaTypes)x
    سپس در اینجا بایستی کدي که در بخش اول این درس براي انتخاب
    ترمینال نوشته شد آورده شود :
    {
    Select Terminal Code
    }
    اجرا شود : Connect سپس بایستی دستور
    gobjCall.Connect (False)x
    بدین معناست که ارتباط بصورت آسنکرون برقرار می شود . False


    ٩٣
    در ویژوال بیسیک - بخش پایانی TAPI
    دریافت یک تماس :
    کد زیر براي یافتن و یا ایجاد یک ترمینال مناسب براي دریافت یک تماس
    بکار می رود . بایستی توجه داشته باشید که قبل از اجراي کد زیر
    بایستی مراحل مقداردهی اولیه ، انتخاب یک آدرس و رجیسر کردن
    ها را انجام دهید . همچنین در کد زیر بایستی مرحله انتخاب event
    ترمینال را نیز انجام دهید . توجه داشته باشید که در کد زیر متغیر
    است ITCallNotificationEvent یک اشاره گر براي واسط pEvent
    داده می شود : event Handler به TAPI که توسط
    If TapiEvent = TE_CALLNOTIFICATION Then
    objCallNotificationEvent As ITCallNotificationEvent Dim
    objCallNotificationEvent = pEvent Set
    ITCallInfo Dim gobjReceivedCallInfo As
    Set gobjReceivedCallInfo = objCallNotificationEvent.Call
    objCallControl As ITBasicCallControl Dim
    gobjReceivedCallInfo = Set objCallControl
    objCallControl.Answer
    End If
    + بخاطر طولانی شدن این سري مطالب و نیز تخصصی بودن آن که باعث
    را به همین جا خاتمه TAPI می شود مخاطبین کمتري داشته باشد بحث
    می دهم . اما براي دوستان علاقمند که بخواهند مطالب بیشتري در این
    را در TAPI زمینه آموخته و نیز مثالهاي عملی از نوشتن برنامه هاي


    ٩٤
    اختیار داشته باشند لینکهاي زیر را معرفی می کنم :
    MSDN در سایت TAPI آموزش
    TAPI سوالات مختلف در مورد
    TAPI سوالات مختلف در مورد
    Call Center Active
    TAPI براي استفاده از ActiveX یک کنترل
    در ویژوال بیسیک TAPI نمونه اي از یک برنامه کامل
    در ویژوال بیسیک TAPI
    در ویژوال بیسیک TAPI کتابی در مورد برنامه نویسی
    Server-Side ) + مبحث بعدي : نوشتن کلاسهاي اکتیو ایکس سمت سرور
    ASP براي استفاده در صفحات ( ActiveX Dll
    WinInet API و RAS API آشنایی با
    بخش اول – WinInet API و RAS API آشنایی با
    مقدمه
    -Internet Service Provide- ISP ویندوز براي برقراري ارتباط با
    از ، dial-up networking شما از طریق مودم و خط تلفن در اتصالات
    استفاده (RAS (Remote Access Service سرویسی خاص به اسم
    RAS می کند . این سرویس داراي یک واسط برنامه نویسی است که


    ٩٥
    نام دارد . این واسط شامل مجموعه اي از توابع است که شما می API
    ابزاري بسیار RAS API . توانید آنها را در برنامه خود صدا بزنید
    قدرتمند و قابل انعطاف است همچنین بسیار پیچیده می باشد .
    خوشبختانه براي استفاده راحتتر ، مایکروسافت تعدادي تابع را در
    قرار داده تا بتوان از آنها براي WinInet API مجموعه اي به اسم
    برقراري ارتباط و کنترل اتصال استفاده کرد .
    WinInet در این مجموعه آموزشی سعی خواهم کرد تا ابتدا در مورد
    مطالبی را بیان کنم . RAS API و سپس API
    بخش دوم – WinInet API و RAS API آشنایی با
    : WinInet API آشنایی با
    مجموعه اي از توابع است که امکان ایجاد و توسعه WinInet API
    برنامه هاي اینترنتی را بصورتی ساده ، سریع و کارآمد براي برنامه
    نویسان مهیا می کند . با استفاده از این مجموعه توابع شما می توانید
    برنامه هایی بنویسید که از منابع اینترنتی با استفاده از پروتکلهایی
    به شما اجازه WinInet استفاده کنند . همچنین FTP و HTTP چون
    ایجاد نموده و آنرا ISP با یک dial-up می دهد تا بتوانید ارتباطی
    کنترل کنید .
    آینست که شما نیازي به دانستن ساختار WinInet مزیت اصلی توابع
    نخواهید داشت . Socket پروتکلهاي ارتباطی و نیز برنامه نویسی
    یک واسط سطح بالا را براي کار با منابع WinInet بعبارت دیگر
    اینترنتی ارائه می دهد .
    : WinInet موجود در Dial-Up امکانات


    ٩٦
    تنها داراي دو تابع WinInet ، تا قبل از ارائه اینترنت اکسپلورر ورژن 4
    بود : dial-up
    براي بررسی اینکه آیا یک ارتباط : InternetAttemptConnect تابع
    به اینترنت وجود دارد یا نه استفاده می شد . اگر هیچ اتصالی به
    را dial-up networking اینترنت وجود نداشت این برنامه کادر تبادلی
    نمایش می داد و کاربر اجازه داشت تا یک اتصال را براي وصل شدن به
    اینترنت انتخاب کند .
    تابع با استفاده از انجام یک : InternetCheckConnection تابع
    اي که به تابع داده شده ، بررسی می کرد که آیا url به ping دستور
    ارتباطی به اینترنت وجود دارد یا نه .
    این دو تابع داراي محدودیتهاي فراوانی بودند . براي مثال تابع اول نمی
    تواند بطور اتوماتیک اتصال به اینترنت را برقرار کند و تابع دوم نیز
    نمی تواند هیچ اطلاعاتی در مورد نوع ارتباط به ما بدهد .
    معرفی کرد که برخی از WinInet نسخه 4 ، تعدادي تابع جدید براي IE
    آنها عبارتند از :
    اطلاعاتی در مورد نوع ارتباط : InternetGetConnectedState تابع
    استفاده شده را بیان می کند . براي مثال این تابع اطلاع می دهد که نوع
    و یا از طریق LAN ارتباط به اینترنت از طریق مودم است یا شبکه
    پروکسی .
    این امکان را فراهم می سازد تا یک ارتباط : InternetAutodial تابع
    اینترنتی اتوماتیک از طریق مودم را با استفاده از مدخل اتصال پیش


    ٩٧
    مشخص کرده ایجاد dial-up networking فرض که کاربر آنرا در
    کنید .
    InternetAutodial این تابع کارآمدتر از تابع : InternetDial تابع
    است و کادري را نمایش می دهد که کاربر می تواند نوع مدخل مورد نظر
    خود براي ارتباط تلفنی با اینترنت را انتخاب کند .
    براي قطع کردن اتصالی مودمی که : InternetAutodialHangup تابع
    برقرار شده استفاده می شود . InternetAutodial از طریق تابع
    براي قطع کردن اتصالی مودمی که از طریق : InternetHangUp تابع
    برقرار شده استفاده می شود . InternetDial تابع
    براي تنظیم کردن وضعیت جاري : InternetSetDialState تابع
    ارتباط اینترنتی استفاده می شود .
    در قسمت بعدي این سلسه مباحث جزئیات این توابع را بررسی کرده
    و نهایتا برنامه اي کاربردي براي کار با این توابع در ویژوال
    بیسیک ارائه خواهم داد .
    : WinInet اطلاعات بیشتري در مورد
    را WinInet API موجود در dial-up در این بخش ما تنها توابع
    داراي امکانات WinInet بررسی کردیم اما همانطور که در ابتدا گفته شد
    فراوانی در زمینه کار با اینترنت است . براي آشنایی بیشتر با این
    امکانات در زیر جداولی ارائه شده که به اختصار امکانات مختلف این
    مجموعه تابع را نشان می دهد :
    : Dial-Up توابع


    ٩٨
    Description Name
    Retrieves InternetGetConnectedState
    the current
    state of the
    Internet
    connection
    Initiates an InternetAutodial
    unattended
    dial-up
    connection
    Disconnects InternetAutodialHangup
    a modem
    connection
    initiated by
    Initiates a InternetDial
    dial-up
    connection
    Disconnects InternetHangUp
    a modem
    connection
    initiated by
    InternetDial
    Prompts the InternetGoOnline
    user for
    permission
    to initiate a
    dial-up
    connection
    to the given
    URL
    Sets the InternetSetDialState
    current state
    of the
    Internet
    connection
    توابع عمومی اینترنت :


    ٩٩
    Description Name
    Initializes the Win32 InternetOpen
    Internet functions
    Opens an FTP, Gopher, InternetConnect
    or HTTP session for a
    given site
    Closes a single Internet InternetCloseHandle
    handle or a subtree of
    Internet handles
    Displays a dialog box InternetErrorDlg
    for the error that is
    passed to
    InternetErrorDlg
    Continues a file search InternetFindNextFile
    started as a result of a
    previous call to
    FtpFindFirstFile or
    GopherFindFirstFile
    Retrieves the last InternetGetLastResponseInfo
    Win32 Internet function
    error description or
    server response on the
    thread calling this
    function
    Allows the user to place InternetLockRequestFile
    a lock on the file being
    used
    Queries the amount of InternetQueryDataAvailable
    data available
    Queries an Internet InternetQueryOption
    option on the specified
    handle
    Reads data from a InternetReadFile
    handle opened by the
    InternetOpenURL,
    FtpOpenFile,
    GopherOpenFile, or


    ١٠٠
    HttpOpenRequest
    function
    Reads data from a InternetReadFileEx
    handle opened by the
    InternetOpenURL,
    FtpOpenFile,
    GopherOpenFile, or
    HttpOpenRequest
    function
    Sets a file position for InternetSetFilePointer
    InternetReadFile
    Sets an Internet option InternetSetOption
    Sets up a callback InternetSetStatusCallback
    function that Win32
    Internet functions can
    call as progress is made
    during an operation
    Placeholder for the InternetStatusCallback
    application-defined
    status callback function
    Formats a date and InternetTimeFromSystemTime
    time according to the
    specified RFC format
    (as specified in the
    HTTP version 1.0
    specification)
    Takes an HTTP InternetTimeToSystemTime
    time/date string and
    converts it to a
    SYSTEMTIME structure
    Unlocks a file that was InternetUnlockRequestFile
    locked using
    InternetLockRequestFile
    Writes data to an open InternetWriteFile
    Internet file
    Checks for changes InternetConfirmZoneCrossing
    between secure and


    ١٠١
    nonsecure URLs
    : URL توابع
    Description Name
    Canonicalizes a InternetCanonicalizeUrl
    URL, which
    includes
    converting
    unsafe
    characters and
    spaces into
    escape
    sequences.
    Combines a base InternetCombineUrl
    and relative URL
    into a single
    URL. The
    resultant URL
    will be
    canonicalized.
    Cracks a URL InternetCrackUrl
    into its
    component
    parts.
    Creates a URL InternetCreateUrl
    from its
    component
    parts.
    Begins reading a InternetOpenUrl
    complete FTP,
    Gopher, or HTTP
    URL.
    : FTP توابع
    Description Name


    ١٠٢
    Creates a new FtpCreateDirectory
    directory on the
    FTP server
    Deletes a file FtpDeleteFile
    stored on the
    FTP server
    Searches the FtpFindFirstFile
    specified
    directory of the
    given FTP
    session
    Retrieves the FtpGetCurrentDirectory
    current directory
    for the given FTP
    session
    Retrieves a file FtpGetFile
    from the FTP
    server and
    stores it under
    the specified file
    name, creating a
    new local file in
    the process
    Stores a file on FtpPutFile
    the FTP server
    Removes the FtpRemoveDirectory
    specified
    directory on the
    FTP server
    Renames a file FtpRenameFile
    stored on the
    FTP server
    Changes to a FtpSetCurrentDirectory
    different working
    directory on the
    FTP server


    ١٠٣
    : HTTP توابع
    Description Name
    Adds one or HttpAddRequestHeaders
    more HTTP
    request headers
    to the HTTP
    request handle
    Ends an HTTP HttpEndRequest
    request
    Opens an HTTP HttpOpenRequest
    request handle
    Queries for HttpQueryInfo
    information
    about an HTTP
    request
    Sends the HttpSendRequest
    specified
    request to the
    HTTP server
    Sends the HttpSendRequestEx
    specified
    request to the
    HTTP server
    بخش سوم – WinInet API و RAS API آشنایی با
    : WinInet موجود در Dial-Up بررسی جزئیات توابع
    بطور اتوماتیک باعث شماره گیري : InternetAutodial 1 – تابع
    اتصال پیش فرض اینترنت توسط مودم می شود . اگر اتصال با موفقیت


    ١٠٤
    بر می گرداند . false و در غیر اینصورت true انجام شود تابع مقدار
    پارامترهاي ورودي تابع :
    فلگ کنترل کننده عملیات اتصال می باشد و یکی از مقادیر : dwFlags
    زیر را می تواند داشته باشد :
    INTERNET_AUTODIAL_FORCE_ONLINE -
    INTERNET_AUTODIAL_FORCE_UNATTENDED -
    پارامتري رزرو شده است و بایستی صفر باشد . : dwReserved
    کردن تابع : declare چگونگی
    Public Declare Function InternetAutodial Lib
    "wininet.dll" (ByVal dwFlags As Long, ByVal dwReserved
    As Long) As Long
    باعث قطع کردن یک اتصال : InternetAutodialHangup 2 – تابع
    اتوماتیک می شود . اگر قطع اتصال با موفقیت انجام شود تابع dial-up
    برمی گرداند . تابع داراي یک false و در غیر اینصورت true مقدار
    است که رزرو شده بود و dwReserved پارامتر ورودي به اسم
    بایستی صفر باشد .
    کردن تابع : declare چگونگی
    Public Declare Function InternetAutodialHangup Lib
    "wininet.dll" (ByVal dwReserved As Long) As Long
    یک اتصال به اینترنت را با استفاده از یک : InternetDial 3 – تابع
    ارتباط مودم مقداردهی اولیه می کند . پارامترهاي ورودي آن عبارتند از
    :
    parent هندل مربوط به پنجره : hwndParent
    مورد استفاده dial-up نام ارتباط : lpszConnectoid


    ١٠٥
    فلگ کنترل اتصال که یکی از مقادیر زیر را می تواند داشته : dwFlags
    باشد :
    INTERNET_AUTODIAL_FORCE_ONLINE -
    INTERNET_AUTODIAL_FORCE_UNATTENDED -
    اتصال به اینترنت از : INTERNET_DIAL_UNATTENDED -
    طریق مودم بدون نمایش واسط کاربر
    آدرس داده اي که شامل عدد متناظر با اتصال است : lpdwConnection
    .
    پارامتري رزرو شده است و بایستی صفر باشد . : dwReserved
    کردن تابع : declare چگونگی
    Public Declare Function InternetDial Lib "wininet.dll"
    (ByVal hwndParent As Long, ByVal lpszConnectoid As
    String, ByVal dwFlags As Long, lpdwConnection As Long,
    ByVal dwReserved As Long) As Long
    این تابع وضعیت اتصال : InternetGetConnectedState 4 – تابع
    جاري به اینترنت را بر می گرداند . اگر اتصال برقرار باشد تابع مقدار
    برمی گرداند . false و در غیر اینصورت true
    پارامترهاي ورودي تابع عبارتند از :
    توصیف وضعیت اتصال . این پارامتر یکی از مقادیر زیر : lpdwFlags
    را می تواند داشته باشد :
    INTERNET_CONNECTION_MODEM -
    INTERNET_CONNECTION_LAN -
    INTERNET_CONNECTION_PROXY -
    INTERNET_CONNECTION_MODEM_BUSY -
    پارامتري رزرو شده است و بایستی صفر باشد . : dwReserved


    ١٠٦
    کردن تابع : declare چگونگی
    Public Declare Function InternetGetConnectedState Lib
    "wininet.dll" (ByRef lpdwFlags As Long, ByVal
    dwReserved As Long) As Long
    پیغامی به کاربر براي دادن مجوز براي : InternetGoOnline 5 – تابع
    را می دهد . اگر اینکار موفقیت آمیز URL مقداردهی اولیه اتصال به یک
    برمی گرداند . پارامترهاي false و در غیر اینصورت true باشد مقدار
    ورودي تابع عبارتند از :
    وب سایت مورد نظر براي اتصال lpszURL : URL
    parent هندل پنجره : hwndParent
    پارامتري رزرو شده است و بایستی صفر باشد . : dwReserved
    کردن تابع : declare چگونگی
    Public Declare Function InternetGoOnline Lib
    "wininet.dll" (ByVal lpszURL As String, ByVal
    hwndParent As Long, ByVal dwReserved As Long) As
    Long
    به مودم می گوید که اتصال به اینترنت : InyernetHangUp 6 – تابع
    را قطع کند . پارامترهاي این تابع عبارتند از :
    شماره مربوط به اتصالی که می خواهیم آنرا قطع : dwConnection
    کنیم .
    پارامتري رزرو شده است و بایستی صفر باشد . : dwReserved
    کردن تابع : declare چگونگی
    Public Declare Function InternetHangUp Lib
    "wininet.dll" (ByVal dwConnection As Long, ByVal
    dwReserved As Long) As Long


    ١٠٧
    تنظیم نمودن وضعیت شماره گیري : InternetSetDialState 7 – تابع
    و در غیراینصورت true مودم . اگر تنظیم با موفقیت انجام شود تابع
    برمی گرداند . پارامترهاي ورودي تابع عبارتند از : false
    dial-up نام اتصال : lpszConnectoid
    در حال حاضر این . dial-up وضعیت مربوط به اتصال : dwState
    پارامتر تنها مقدار
    را می تواند INTERNET_DIALSTATE_DISCONNECTED
    داشته باشد .
    پارامتري رزرو شده است و بایستی صفر باشد . : dwReserved
    کردن تابع : declare چگونگی
    Public Declare Function InternetSetDialState Lib
    "wininet.dll" (ByVal lpszConnectoid As String, ByVal
    dwState As Long, ByVal dwReserved As Long) As Long
    : dial-up بررسی فلگهاي مورد استفاده در توابع
    : InternetDial 1 – فلگهاي تابع
    = Public Const INTERNET_DIAL_UNATTENDED
    x80000' &H8000&
    = Public Const INTERENT_GOONLINE_REFRESH
    x000000010' H1&
    H1& = Public Const INTERENT_GOONLINE_MASK
    x000000010'


    ١٠٨
    : InternetAutoDial 2 – فلگهاي تابع
    Public Const
    INTERNET_AUTODIAL_FORCE_ONLINE = 1
    Public Const
    INTERNET_AUTODIAL_FORCE_UNATTENDED = 2
    Public Const
    INTERNET_AUTODIAL_FAILIFSECURITYCHECK =
    4
    : InternetGetConnectedState 3 – فلگهاي تابع
    Public Const INTERNET_CONNECTION_MODEM = 1
    INTERNET_CONNECTION_LAN = 2 Public Const
    4 = Public Const INTERNET_CONNECTION_PROXY
    Public Const
    INTERNET_CONNECTION_MODEM_BUSY = 8
    اختصاصی : dial handler 4 - فلگهاي مربوط به
    Public Const INTERNET_CUSTOMDIAL_CONNECT =
    0
    Public Const
    INTERNET_CUSTOMDIAL_UNATTENDED = 1
    Public Const
    INTERNET_CUSTOMDIAL_DISCONNECT = 2
    اختصاصی : dial handler 5 – فلگهاي عملیاتی پشتیبانی شده براي
    Const Public
    INTERNET_CUSTOMDIAL_SAFE_FOR_UNATTENDE
    D = 1
    Public Const
    INTERNET_CUSTOMDIAL_WILL_SUPPLY_STATE =
    2


    ١٠٩
    Public Const
    INTERNET_CUSTOMDIAL_CAN_HANGUP = 4
    : InternetSetDialState 6 - وضعیتهاي مربوط به
    Public Const
    INTERNET_DIALSTATE_DISCONNECTED = 1
    + براي اطلاعات بیشتر در مورد این توابع به این آدرس مراجعه کنید .
    WinInet موجود در کتابخانه DialUp مثالی از کار با توابع
    است برنامه اي WinInet API در این بخش که آخرین بخش از مباحث
    نمونه براي کار با توابع مودمی این کتابخانه ارائه خواهیم داد :
    براي نوشتن برنامه اي که بتوان از طریق آن با استفاده از مودم به
    اینترنت متصل شد بصورت زیر عمل می کنیم :
    کنیم : Declare را InternetDial در ابتدا بایستی تابع
    Private Declare Function InternetDial Lib "wininet.dll"
    Alias "InternetDialA" (ByVal hwndParent As Long,
    ByVal lpszConnectoid As String, ByVal dwFlags As Long,
    lpdwConnection As Long, ByVal dwReserved As Long) As
    Long
    قرار می lOption سپس وضعیت شماره گیري را در متغیري به اسم
    دهیم . این متغیر می تواند مقادیر زیر را داشته باشد :
    DF_FORCE_ONLINE -
    DF_FORCE_UNATTENDED -
    DF_DIAL_FORCE_PROMPT -
    DF_DIAL_UNATTENDED -


    ١١٠
    حال نام اتصالی را که می خواهیم از آن استفاده شود در متغیري به اسم
    قرار می دهیم . ConnectionName
    long را از نوع RetVal و ConnectionID همچنین دو متغیر به اسم
    تعریف می کنیم .
    را بصورت زیر صدا می کنیم : InternetDial حال تابع
    RetVal = InternetDial(Me.hwnd, ConnectionName,
    lOption, ConnectionID, 0)
    بدرستی انجام شده است . Dial مخالف صفر باشد عمل RetVal اگر
    استفاده InternetHangUp براي قطع اتصال فوق بایستی از تابع
    می کنیم : Declare کنیم . براي اینکار ابتدا تابع فوق را
    Private Declare Function InternetHangUp Lib
    "wininet.dll" (ByVal dwConnection As Long, ByVal
    dwReserved As Long) As Long
    سپس این تابع را بصورت زیر فراخوانی می کنیم :
    RetVal = InternetHangUp(ConnectionID, 0)
    براي اینکه مودم را مجبور کنیم تا بطور اتوماتیک از اتصال پیش فرض
    InternetAutodial سیستم براي شماره گیري استفاده کند از تابع
    استفاده می کنیم .
    می کنیم : Declare براي اینکار ابتدا تابع را
    Private Declare Function InternetAutodial Lib
    "wininet.dll" (ByVal dwFlags As Long, ByVal
    hwndParent As Long) As Long
    سپس تابع را بصورت زیر فراخوانی می کنیم :


    ١١١
    RetVal =
    InternetAutodial(ADF_FORCE_UNATTENDED,
    Me.hwnd)
    بدرستی انجام شده AutoDial مخالف صفر باشد عمل RetVal اگر
    است .
    ایجاد شده از تابع AutoDial براي قطع اتصالی که توسط
    استفاده می کنیم . ابتدا این تابع را InternetAutodialHangup
    می کنیم : Declare
    Private Declare Function InternetAutodialHangup Lib
    "wininet.dll" (ByVal dwReserved As Long) As Long
    فراخوانی این تابع بصورت زیر است :
    Call InternetAutodialHangup(0)
    براي اینکه بفهیم آیا اتصال به اینترنت وجود دارد یا نه از تابع
    استفاده می کنیم . براي اینکار InternetGetConnectedStateEx
    می کنیم : Declare ابتدا تابع را
    Private Declare Function InternetGetConnectedStateEx
    Lib "wininet.dll" Alias "InternetGetConnectedStateExA"
    (lpdwFlags As Long, lpszConnectionName As Long,
    dwNameLen As Long, ByVal dwReserved As Long) As
    Long
    سپس تابع را بصورت زیر فراخوانی می کنیم :
    strConnectionName = Space(256)
    lNameLen = 256
    lPtr = StrPtr(strConnectionName)
    lNameLenPtr = VarPtr(lNameLen)


    ١١٢
    RetVal = InternetGetConnectedStateEx(lConnectionFlags,
    ByVal lPtr, ByVal lNameLen, 0)
    و بقیه متغیرها از نوع String از نوع strConnectionName که
    هستند . Long
    مخالف صفر باشد اتصال برقرار است . RetVal اگر
    ثابتهایی که در کدهاي فوق استفاده شده عبارتند از :
    Private Const
    INTERNET_AUTODIAL_FORCE_ONLINE = 1&
    Private Const
    INTERNET_AUTODIAL_FORCE_UNATTENDED = 2&
    Private Const
    INTERNET_AUTODIAL_FAILIFSECURITYCHECK =
    4&
    Private Const INTERNET_DIAL_FORCE_PROMPT =
    &H2000
    Private Const INTERNET_DIAL_SHOW_OFFLINE =
    &H4000
    Private Const INTERNET_DIAL_UNATTENDED =
    &H8000
    Server-Side ActiveX Dll Programming
    بخش اول - Server-Side ActiveX Dll Programming
    مقدمه
    برنامه ، server side هاي component درون ASP با قراردادن کدهاي


    ١١٣
    نویس نه تنها می تواند از قابلیت هاي ویژوال بیسیک در نوشتن کدهاي
    وي نیز افزایش می ASP صفحات load خود استفاده کند بلکه سرعت
    یابد . همچنین این روش راهکاري براي کپسوله سازي و حفاظت از
    می باشد . ASP کدهاي
    را توسط ویژوال server-side در این درس یک نمونه اکتیویکس
    استفاده خواهیم کرد . ASP بیسیک ایجاد نموده و از آن در صفحات
    Server-Side اجزاي
    بر روي clict-side بر خلاف اکتیوکس هاي server-side اکتیوکس هاي
    سرور وب اجرا می شوند و بنابراین بایستی وب سرور مورد استفاده با
    این تکنولوژي سازگار باشد . زمانیکه وب سرور دستوري را براي
    دریافت می کند ASP پردازش یکسري اطلاعات درون یک صفحه
    دستوراتی که درون تگهاي %> قرار دارند بررسی می شوند . با استفاده
    ساخت که جایگزین این dll از ویژوال بیسیک می توان یک اکتیوکس
    شود . در اینصورت تنها کافیست یک شی از کلاسهاي ASP کدهاي
    ساخته شود تا بتوان از قابلیتهاي آن استفاده نمود . dll موجود در این
    در ویژوال بیسیک Dll ActiveX ایجاد
    براي ساخت یک اکتیواکس ویژوال بیسیک را اجرا کرده و توسط گزینه
    ایجاد کنید . پس از اینکه ActiveX Dll پروژه اي از نوع New Project
    کلیک کنید ویژوال بیسیک پروژه اي ActiveX dll شما روي آیکون
    پیش فرض بهمراه ي: کلاس خالی براي شما ایجاد می کند . می توانید هم
    نام پروژه و هم نام کلاس را تغییر دهید همچنین می توانید کلاسهاي
    دیگري به پروژه اضافه کنید .
    را استفاده نموده بایستی از ASP حال براي اینکه بتوان دستورات


    ١١٤
    Microsoft شده و مورد References وارد بخش Project منوي
    را انتخاب کنید . Active Server Pages Object Library
    ActiveX در کلاس هاي ASP استفاده از متدهاي
    بایستی ابتدا ActiveX در کلاسهاي ASP بمنظور استفاده از متدهاي
    در داخل کلاس تعریف کنید . ساختار OnStartPage روتینی به اسم
    این روتین بصورت زیر است :
    Public Sub OnStartPage(PassedScriptingContext As
    ScriptingContext)x
    End Sub
    را که شامل شی اي از کلاس ما باشد ASP زمانیکه کاربر یک صفحه
    را به شی ما پاس می دهد . SciptingContext ،IIS فراخوانی کند
    می باشد که ASP حاوي تمام متدها و خصوصیات ScriptingContext
    براي استفاده در دسترس هستند . حال بایستی در روتین
    در ScriptingContext که توسط ASP تمام اشیاي OnStartPage
    کنیم تا در صورت assign دسترس هستند را به اشیایی از همان نوع
    لزوم بتوانیم از آنها استفاده نمائیم . بنابراین قبل از نوشتن روتین
    متغیرهاي زیر را تعریف می کنیم : OnStartPage
    ScriptingContext Private MyScriptingContext As
    Private MyApplication As Application
    Request Private MyRequest As
    Private MyResponse as Response
    Server Private MyServer As
    Private MySession As Session


    ١١٥
    بایستی اشیا فوق را مقداردهی کنید : OnStartPage حال در روتین
    Public Sub OnStartPage(PassedScriptingContext As
    ScriptingContext)x
    Set MyScriptingContext=PassedScriptingContext
    MyApplication=MyScriptingContext.Application Set
    MyRequest=MyScriptingContext.Request Set
    MyResponse=MyScriptingContext.Response Set
    MyServer=MyScriptingContext.Server Set
    MySession=MyScriptingContext.Session Set
    End Sub
    می توانیم در متدهایی که ASP از تمام اشیا فوق مشابه نوشتن صفحات
    زیر را در نظر ASP براي کلاس می نویسیم استفاده کنیم . براي مثال کد
    بگیرید :
    MyTempVar=Request.Form(“username”)x
    MyTempVar)x & “ : Entered Response.Write(“You
    <%
    حال فرض کنید می خواهیم همین دستورات را در یک متد از کلاس
    بنویسیم :
    Public Sub MyMethod()x
    String Dim MyTempVar As
    MyTempVar=MyRequest.Form(“username”)x


    ١١٦
    MyTempVar)x & “ : MyResponse.Write(“You Entered
    End Sub
    نکته دیگري که باید در نظر داشت نوشتن روتینی است که در زمان
    نام دارد OnEndPage پایان کار با شی فراخوانی می شود . این روتین
    مقداردهی کرده ایم را آزاد OnStartPage و در آن اشیایی که در روتین
    می کنیم :
    Public Sub OnEndPage()x
    MyScriptingContext=Nothing Set
    Set MyApplication= Nothing
    Nothing =Set MyRequest
    Set MyResponse= Nothing
    Set MyServer= Nothing
    Nothing =Set MySession
    End Sub
    پس از نوشتن متدهاي موردنظرتان پروژه را ذخیره کنید . حال براي
    را انتخاب نمائید تا File/Make Dll مورد File کامپایل پروژه از منوي
    موردنظرتان ساخته شود . این فایل را در dll پروژه کامپایل شده و فایل
    شما در آنجا قرار دارد کپی کنید . ASP دایرکتوریی که صفحات
    نکته اي که باید مورد توجه قرار داد اینست که در صورتیکه می خواهید
    در سیستم دیگري استفاده کنید ابتدا بایستی آنرا رجیستر dll از این
    موجود در regsvr32.exe از برنامه dll کنید . براي رجیستر کردن یک
    دایرکتوري سیستم ویندوز استفاده می شود :
    C:\InetPub\wwwroot\Example\Example.dll Regsvr32.exe


    ١١٧
    ASP در صفحات ActiveX Dll استفاده از
    ابتدا ASP در صفحات dll براي استفاده از کلاس نوشته شده در فایل
    بایستی یک شی از آن کلاس ایجاد کنیم :
    = Set ObjRefrence
    Server.CreateObject(“ProjectName.ClassName”)x
    <%
    پس از ساخت شی می توانیم از متدهاي موجود در کلاس استفاده کنیم :
    ObjReference.MyMethod()x
    <%
    بخش دوم - Server-Side ActiveX Dll Programming
    چیست ؟ COM+
    در درس گذشته بیان ASP هاي Object روشی که براي دسترسی به
    OnStart استفاده می شد . این روش استفاده از متدهاي IIS شد تا 3.0
    ورژن 5 IIS بود . البته گرچه هنوز این روش از سوي OnEnd و
    پشتیبانی می شود اما داراي یک مشکل است :
    اگر بخواهید از یک کلاس در کلاس دیگري استفاده کنید نمی توانید در


    ١١٨
    کلاس مورد استفاده ، دو متد ذکر شده را قرار دهید و بنابراین به اشیاي
    دسترسی نخواهید داشت . ASP
    می باشد . COM+ راه حلی که براي این مشکل ارائه شد تکنولوژي
    وجود ObjectContext بطور خلاصه در این تکنولوژي شیی به اسم
    دسترسی داشته باشید . ASP دارد که از طریق آن می توانید به اشیاي
    ،Project ابتدا از منوي COM+ براي استفاده از تکنولوژي
    را انتخاب کرده و مورد زیر را انتخاب کنید : References
    Services Type Library +COM
    سپس در کلاسهاي خود متغیرهاي زیر را تعریف کنید :
    Dim Request As ASPTypeLibrary.Request
    Response As ASPTypeLibrary.Response Dim
    ASPTypeLibrary.Server Dim Server As
    Dim Session As ASPTypeLibrary.Session
    Application As ASPTypeLibrary.Application Dim
    را ObjectContext هر کلاس بایستی شی Initialize حال در متد
    تعریف کرده و مقداردهی کنید . سپس متغیرهاي بالا را با استفاده از این
    شی مقداردهی نمائید :
    Private Sub Class_Initialize()x
    ObjectContext Dim objCtx As
    Set objCtx = GetObjectContext
    objCtx.item("Request")x = Set Request
    Set Response = objCtx.item("Response")x
    objCtx.item("Server")x = Set Server
    Set Session = objCtx.item("Session")x
    Application = objCtx.item("Application")x Set
    End Sub


    ١١٩
    پاسخ به سوالات شما :
    1 - چه جوري دکمه ها و لیست باکس ها در ویژوال بیسیک را شکل اکس
    پی کنیم؟اصلان می شه؟
    پاسخ : ؟؟؟؟
    هاشو نخاد و بدونه اونا اجرا dll چطوري میشه فایله اجرایی vb 2 - تویه
    بشه ؟
    پاسخ : برنامه هاي اجرایی ویژوال بیسیک براي اجرا شدن به یکسري
    براي اینکه به این فایلها . Vb Runtime Dll فایلهاي دیگه نیاز دارند مثلا
    براي پروژه تان بسازید setup file نیازي نباشد بایستی یک برنامه نصب
    تا بتوان برنامه را روي هر کامپیوتري نصب و اجرا کرد . ساده تري راه
    موجود در ویژوال استدیو Deployment & Package استفاده از ابزار
    ،InstallWise ،InstallShield : است . ابزارهاي حرفه اي تر عبارتند از
    و ... Setup Factory
    دهید . mpr 3 - اگه ممکنه یه توضیحی درباره ي دي کد کردن دي ال ال
    پاسخ : ؟؟؟؟
    4 - چطوري میشه تو یه تکس باکس در ویژوال بیسیک فرمان داد اینتر
    شود یعنی به خط بعدي رود؟ ( یعنی زمانی که مولتی لاین اس ت)
    vbCrLf پاسخ : استفاده از کاراکتر
    برنامه بنویسیم ولی تمامی این ASP و PHP 5 - من می خوام با زبانهایی
    هستند و من باید روي سرور این کار ها رو انجام Server_side زبانها
    بدم من می خوامم بدونم که چه طوري می تونم کامپیوتر خودمو وب
    رو نصب کنم ولی نه به IIS سرور کنم البته یه چیزهاي می دونم که باید
    طور کامل خواهش می کنم کمکم کنید


    ١٢٠
    آنها استفاده IIS نصب کرده و از XP پاسخ : بایستی ویندوز 2000 یا
    بطور اتوماتیک نصب نمی شود و باید IIS کنید . البته در ویندوزز 2000
    به IIS آنرا خودتان اضافه کنید . براي اطلاعات بیشتر در مورد کار با
    کتاب ها و مراجع اینترنتی مراجعه کنید مراجعه کنید .
    بخش سوم - Server-Side ActiveX Dll Programming
    در وي ( Database ) خلاصه اي بر چگونگی کار با بانک هاي اطلاعاتی
    بی :
    + براي آشنایی کامل با چگونگی کار با بانک هاي اطلاعاتی در ویژوال
    به کتاب برنامه Database Programming بیسیک و بطور کلی
    نویسی بانک هاي اطلاعاتی در ویژوال بیسیک انتشارات نص رجوع
    کنید .
    براي استفاده در Database قبل از اینکه چگونگی نوشتن یک کلاس
    را آموزش دهم ، مقدمه اي بر چگونگی کار با بانک هاي اطلاعاتی ASP
    در وي بی را شروع می کنم .
    براي کار با بانک هاي اطلاعاتی در ویژوال بیسیک روشها و امکانات
    ADO ) مختلفی وجود دارد که یکی از بهترین آنها استفاده از تکنولوژي
    می باشد . بدون هیچ توضیحی در مورد ActiveX Data Object )
    ساختار این تکنولوژي و نیز سایر روشهاي دیگر ، به سراغ روش
    استفاده از این تکنولوژي می روم :
    ها مورد Reference ابتدا بایستی از ADODB - براي کار با
    را انتخاب کرد . Microsoft ActiveX Data Object
    براي اتصال به بانک ADO Connection - قدم بعد تعریف یک شی
    اطلاعاتی است :


    ١٢١
    Dim cn As ADODB.Connection
    را ایجاد نمود : ADO Connection - سپس بایستی این شی
    Set cn = New ADODB.Connection
    براي گرفتن مجموعه اي ADO Recordset - همچنین بایستی یک شی
    از رکوردهاي بانک اطلاعاتی تعریف کرد :
    Dim rs As ADODB.Recordset
    - حال بایستی اتصال به بانک اطلاعاتی را باز نمود . در این مرحله با
    توجه به نوع بانک اطلاعاتی و اتصالی که می خواهیم داشته باشیم
    عبارت اتصال ممکن است متفاوت باشد . فرض کنیم عبارت اتصال را در
    قرار دهیم : ConnString به اسم String یک متغیر نوع
    باشد و بخواهیم SQL Server • در صورتی که بانک اطلاعاتی مقصد
    به آن متصل شویم : ODBC بطور مستقیم و بدون استفاده از واسط
    ConnString=”Provider=SQLOLEDB.1;Password=yourpas
    Security Info=True;User ID=yourusername; sowrd;Persist
    Initial Catalog=yourDatabaseName;Data
    ”Source=yourServerName
    باشد و بخواهیم SQL Server • در صورتی که بانک اطلاعاتی مقصد
    به آن متصل شویم : ODBC با استفاده از واسط
    ConnString=”Provider=MSDASQL.1;Password=yourpass
    Security owrd;Persist


    ١٢٢
    Info=True;UserID=yourusername;DataSource=yourODB
    ”C_DataSourceName;Mode=ReadWrite
    باشد : Access • در صورتی که بانک اطلاعاتی مقصد
    ConnString=” Provider=Microsoft.Jet.OLEDB.4.0;Data
    Source=yourDatabaseFilePath;Persist Security
    ”Info=False
    حال بایستی این اتصال را باز نمود :
    cn.Open(ConnString)x
    می باشد : ADO Recordset - قدم بعدي ایجاد شی
    Set rs = New ADODB.Recordset
    - سپس بایستی با توجه به کاري که می خواهیم با جداول آن بانک
    به آن Recordset را توسط شی sql query اطلاعاتی انجام دهیم یک
    بفرستیم :
    adLockOptimistic ,rs.Open yourSQLquery,cn,OpenKeyset


    ١٢٣
    query متفاوت است و توسط Recordset بعبارت دیگر نوع باز کردن
    Table مورد نظر مشخص می شود براي مثال براي انتخاب فیلدهاي یک
    :
    DISTINCT yourfields from yourtable WHERE SELECT
    yourcondition
    نیز adLockReadOnly نکته : نوع قفل کردن مجموعه رکورد می تواند
    باشد .
    می توان یکسري کار را روي Recordset - حال با استفاده از این
    رکوردهاي موجود در جداول انجام داد براي مثال :
    1 – حرکت به ابتداي مجموعه رکورد :
    rs.MoveFirst
    2 – حرکت در طول مجموعه رکورد :
    Do
    rs.fields(0)x = tmp
    .
    .
    .
    rs.MoveNext
    Loop Until (rs.EOF)x
    3 – بستن مجموعه رکورد و بستن اتصال به بانک اطلاعاتی :


    ١٢٤
    rs.Close
    cn.Close
    4 – حذف رکورد جاري از مجموعه رکورد :
    rs.delete
    5 - ایجاد رکورد جدید در مجموعه رکورد :
    Dim fields(RecordsetFieldsCount) As Variant
    values(RecordsetFieldsCount) As Variant Dim
    fields(0) = Field 1 Name
    Field 2 Name = (fields(1
    .
    .
    .
    fields(n) = Field n Name
    Field 1 Value = (values(0
    values(1) = Field 2 Value
    .
    .
    .
    Value values(n)= Field n
    rs.AddNew fields, values
    rs.update
    بخش چهارم - Server-Side ActiveX Dll Programming


    ١٢٥
    براي کار با جداول بانک هاي اطلاعاتی query آشنایی با چند
    براي انتخاب رکوردها از یک جدول استفاده می شود . : SELECT -1
    فرمت کلی این دستور بصورت زیر است :
    condition WHERE tablename FROM fieldnames SELECT
    fieldnames ORDER BY
    داریم که داراي دو فیلد به mytable مثال : فرض کنید یک جدول به اسم
    باشد : string از نوع name و integer از نوع id نامهاي
    – انتخاب تمامی رکوردهاي جدول :
    mytable"x query="Select * from
    تمام رکوردهاي جدول : name - انتخاب فیلد
    mytable"x query="Select name from
    آنها برابر 2 باشد : id - انتخاب رکوردهایی از جدول که فیلد
    query="Select * from mytable where id=2"x
    باشد : a آنها برابر name - انتخاب رکوردهایی از جدول که فیلد
    name=’a’"x query="Select * from mytable where
    است در دستور string از نوع name توجه داشته باشید که چون فیلد
    استفاده شده است . name فوق از ‘ براي مقدار فیلد
    آنها name آنها برابر 2 و فیلد id - انتخاب رکوردهایی از جدول که فیلد
    مرتب شده باشند . id باشد و بر حسب a برابر
    query="Select * from mytable where id=2 and name=’a’
    order by id"x
    نکته : در صورتیکه بخواهیم از یک متغیر براي مقداردهی به یک فیلد در
    و یا integer استفاده کنید با توجه به اینکه آن متغیر از نوع query
    است باید بصورت زیر عمل کنیم : string
    Dim mId as integer


    ١٢٦
    string Dim mName as
    mId=1
    mName="a"x
    " & (str(mId & "=query="Select * from mytable where id
    x"’" & mName & "’=and name
    این دستور براي قرار دادن یک رکورد در جدول استفاده : INSERT – 2
    می شود . فرمت کلی این دستور بصورت زیر است :
    (…,field2name,field1name) tablename INSERT INTO
    x(…,field2value,field1value) VALUES
    مثال :
    mytable (id,name) values (1,’a’)"x query="Insert into
    این دستور براي تغییر مقادیر یک رکورد از جدول : UPDATE – 3
    استفاده می شود . فرمت کلی این دستور بصورت زیر است :
    ,field1value=field1name SET tablename UPDATE
    …,field2value=field2name
    مثال :
    mytable set id=2 , name=’b’"x query="Update
    این دستور براي حذف یک یا چند رکورد از جدول : DELETE – 4
    استفاده می شود . فرمت کلی این دستور بصورت زیر است :


    ١٢٧
    condition WHERE tablename DELETE FROM
    مثال :
    id=1"x query="Delete from mytable where
    هاي مختلف براي کار با query و نیز ADODB حال که با تکنولوژي
    جداول بانک هاي اطلاعاتی آشنا شدید می توانیم کلاسی براي کار با بانک
    استفاده کنیم اما همانطور asp هاي اطلاعاتی بنویسیم و از آن در صفحات
    که در قسمت قبل دیدید براي اتصال به یک بانک اطلاعاتی نیاز به یکسري
    اطلاعات مثل نام سرور ، نام بانک اطلاعاتی و ... داریم . چند روش براي
    دادن این اطلاعات وجود دارد :
    1 – در کلاسی که می نویسیم این مقادیر را مشخص کنیم . اشکال این
    روش اینست که از کلاس نوشته شده تنها براي یک کاربرد خاص می
    توانیم استفاده کنیم و در صورتیکه سرور بانک اطلاعاتی و یا نام بانک
    اتصال تغییر کند بایستی در password و username اطلاعاتی ویا
    کلاس نوشته شده نیز تغییرات را اعمال کرده و مجدداً آنرا کامپایل کنیم .
    به متد اتصال موجود asp 2 – راه حل دوم اینست که پارامترها را از طریق
    در کلاس بفرستیم براي مثال :
    db=server.createobject(“dbclass.database)x Set
    Db.connect(servername,databasename,username,passwo rd)
    x
    می باشد . database متد اتصال به بانک اطلاعاتی در کلاس coonect که
    قراردهیم و XML 3 – روش سوم آنست که این پارامترها را در یک فایل


    ١٢٨
    آنها را از فایل بخوانیم . مزیت این روش اینست که connect در متد
    پارامترها هم به آسانی قابل تغییر بوده و هم براحتی آنها می توان آنها را
    استخراج نمود .
    xml براي این منظور بایستی ابتدا یک کلاس براي خواندن اطلاعات از فایل
    بنویسیم که موضوع درس بعد می باشد .
    آشنا نیستید پیشنهاد می کنم xml نکته : در صورتیکه با فرمت فایلهاي
    یک مطالعه مقدماتی در این زمینه انجام دهید .
    بخش پنجم - Server-Side ActiveX Dll Programming
    بخش اول : - Database نوشتن کلاس
    و چگونگی استفاده از آن در ADODB پس از مباحثی که در مورد شی
    داشتیم اکنون می توانیم یک XML وي بی و نیز استفاده از فایلهاي
    بنویسیم . ASP کلاس کامل و قدرتمند براي کار با بانکهاي اطلاعاتی در
    مراحل کار بصورت زیر می باشد :
    DBase ایجاد کنید و نام آنرا Dll ActiveX 1 - ابتدا یک پروژه از نوع
    بگذارید .
    مواردي را که در مباحث قبلی گفته شد به References 2 - از بخش
    پروژه اضافه کنید .


    ١٢٩
    را براي کلاس بصورت زیر تعریف کنید : Cn 3 - متغیر
    Private Cn As ADODB.Connection
    براي کلاس می نویسیم . InitialConnection 4 - ابتدا یک متد به اسم
    در این متد ابتدا پارامترهاي اتصال به بانک اطلاعاتی را مشابه آنچه در
    می خوانیم و config.xml به اسم XML درس قبل گفته شد از یک فایل
    با استفاده از آنها اتصال به بانک اطلاعاتی را باز می کنیم :
    Public Sub InitialConnection()x
    database_name, server_name ,Dim userName, Password
    Dim xmlf As NewXMLReader
    xmlf.Initiate("config.xml")x Call
    x ("userName = xmlf.getvalue("DataBaseID
    Password = xmlf.getvalue("DataBasePassword") x
    xmlf.getvalue("DataBaseName") x = database_name
    xmlf.getvalue("ServerAddress")x = server_name
    CreateObject("ADODB.Connection")x = Set Cn
    = Cn.ConnectionString
    & Password & "=Provider=SQLOLEDB.1;Password"
    & userName & "=Info=True;User ID Persist Security;"
    "=Data Source;" & database_name & "=Initial Catalog;"
    server_name &
    Cn.Mode = adModeReadWrite
    Cn.Open
    End Sub


    ١٣٠
    است که XML کلاس کار با فایلهاي XMLReader لازم به ذکر است که
    در قسمت قبلی در مورد آن صحبت کردیم .
    5 - براي بستن اتصال متد زیر را به کلاس اضافه کنید :
    EndConnection()x Public Sub
    Cn.Close
    Set Cn = Nothing
    End Sub
    است ( مثل Boolean هایی که نتیجه آنها از نوع query 6 - براي اجراي
    را به کلاس اضافه ExecuteUpdate متدي به اسم ( Delete و Insert
    کنید :
    ExecuteUpdate(ByVal squery As String) Public Function
    As Boolean
    Recordset Dim myrs As New
    If Not (makesInjection(squery)) Then
    adLockOptimistic = myrs.LockType
    Set myrs = Cn.Execute(squery) x
    ExecuteUpdate = True
    Exit Function
    Else
    ExecuteUpdate = False
    Exit Function
    If End
    End Function
    است ( RecordSet هایی که نتیجه آنها از نوع query 6 - براي اجراي


    ١٣١
    را به کلاس اضافه کنید : ExecuteQuery متدي به اسم ( Select مثل
    Public Function ExecuteQuery(ByVal squery As String)
    As Recordset
    Not (makesInjection(squery)) Then If
    Cn.Execute(squery)x = Set ExecuteQuery
    Exit Function
    Else
    Nothing = Set ExecuteQuery
    Exit Function
    End If
    End Function
    ExecuteQuery و ExecuteUpdate همانطور که می بینید در دو متد
    استفاده شده است . این تابع makesInjection از تابعی به اسم
    وجود دارد یا SQL-Injection ورودي query بررسی می کند که آیا در
    نه .
    بخش ششم - Server-Side ActiveX Dll Programming
    [/size]

  2. # ADS
    Circuit advertisement
    تاریخ عضویت
    Always
    محل سکونت
    Advertising world
    نوشته ها
    Many

     

    حرز امام جواد

     

+ ارسال نظر

اطلاعات موضوع

کاربرانی که در حال مشاهده این موضوع هستند

در حال حاضر 1 کاربر در حال مشاهده این موضوع است. (0 کاربران و 1 مهمان ها)

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را دارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •  
کانال سپاه