نمایش نتایج 1 تا 3 از 3

نام تاپیک: این دستور Memory.AllocHLocal توی این کد ارور میده، چکارش کنم؟

  1. #1

    این دستور Memory.AllocHLocal توی این کد ارور میده، چکارش کنم؟

    سلام

    لطفاً این نمونه کد رو نگاه کنید، خط هایی که دستور Memory در آنها به کار رفته (با فلش مشخص کرده ام) این ارور را می دهند:
    Name 'Memory' is not declared

    باید چکار کنم؟
    (در ضمن لطفاً از اشتباهاتی که در کد زیر به دلیل دستکاری ویرایشگر تالار ایجاد شده، مثل چسبیدن بعضی کلمات به هم چشمپوشی کنید)


    PrivateStructure RASCONN
    Dim dwSize AsInteger
    Dim hRasCon As IntPtr
    Dim szEntryName() AsChar
    EndStructure
    <DllImport("coredll.dll", SetLastError:=True)> _
    PrivateSharedFunction RasEnumConnections(ByVal lpRasCon As IntPtr, ByRef lpCb AsInteger, ByRef lpcConnections AsInteger) AsInteger
    EndFunction
    PublicSharedFunction EnumerateConnections() AsBoolean
    Dim structPtr As IntPtr
    Dim size, lpCb, lpcConn AsInteger
    Dim rasConn AsNew RASCONN
    size = Marshal.SizeOf(rasConn) + (20 * Marshal.SystemDefaultCharSize)
    rasConn.dwSize = size
    ReDim rasConn.szEntryName(20)
    lpCb = size
    '--------------------->
    structPtr = memory.AllocHLocal(size)
    Marshal.StructureToPtr(rasConn, structPtr, False)
    If (RasEnumConnections(structPtr, lpCb, lpcConn) = 0) Then
    For i AsInteger = 0 To lpcConn - 1
    rasConn = CType(Marshal.PtrToStructure(structPtr, GetType(RASCONN)), RASCONN)
    Next
    Else
    ReturnFalse' failure
    EndIf
    '--------------->
    Memory.FreeHLocal(structPtr)
    ReturnTrue' success
    EndFunction


    PrivateSub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    MsgBox(Me.EnumerateConnections)
    EndSub

  2. #2
    کاربر دائمی آواتار __H2__
    تاریخ عضویت
    اسفند 1385
    محل زندگی
    یک جایی بین Framework و نارمک!
    پست
    1,059
    سلام
    خوب واضح است، اصلاٌ ماژولی به نام Memory نداریم.
    مثل اینه که من همینوطر بنویسیم "برو و تابع Ali را اجرا کن" باید تابع Ali وجود داشته باشه یا نه؟؟؟؟؟

    احتمالاً کدهای فوق را از C گیر آورده اید.
    به هرحا برای حافظه گیری برای Structure ها نیازی به هیچ کاری نیست. ذات تعریف یک Structure در VB.Net موجب حافظه گیری خودکار میشود، به آزاد سازی حافظه هم کلاً نیازی نیست.

    شاید کد زیر مشکلتان را حل کنید

    Private Declare Ansi Function RasEnumConnections Lib"coredll.dll" (<System.Runtime.InteropServices.MarshalAs(Runtime .InteropServices.UnmanagedType.LPStruct)> ByVal lpRasCon As RASCONN, ByRef lpCb As Integer, ByRef lpcConnections As Integer) As Integer

    Private Structure RASCONN
    Public dwSize As Integer
    Public hRasCon As Integer

    <Global.Microsoft.VisualBasic.VBFixedString(20)> Public szEntryName As String

    '<Global.Microsoft.VisualBasic.VBFixedArray(19)> _
    '<System.Runtime.InteropServices.MarshalAs(Runtime .InteropServices.UnmanagedType.LPStr)> _
    'Public szEntryName() As Char


    Public Sub New(ByVal CharSize As Integer)
    Me.szEntryName = New String(" "c, CharSize)
    'Me.szEntryName = NewChar(CharSize) {}
    Me.dwSize = 4 + 4 + 20
    End Sub
    End Structure

    Public Shared Function EnumerateConnections() As Boolean
    Dim lpCb, lpcConn As Integer
    Dim rasConn As New RASCONN(20)
    lpCb = rasConn.dwSize

    If RasEnumConnections(rasConn, lpCb, lpcConn) = 0 Then
    'Already rasConn
    Return True' success
    Else
    Return False' failure
    End If
    End Function



    اگر به حالت آرایه خواستید میتوانید دستورات نارنجی رنگ را فعال کنید و دستور بالایی را حذف کنید

    در مورد جایی هم که در خط اول بولد شده.
    بهتر است ترکیبات دیگر مثل:
    Struct)> ByVal
    LPStruct)> ByRef
    Struct)> ByRef

    را هم امتحان کنید، یکی از این چهار ترکیب به خوبی جواب میدهد ولی الآن یادم نیست و وقت امتحان کردن هم ندارم.

    ضمناً دستور For شما کاملاً بی معنی بود.

  3. #3
    سلام
    تا حالا حداقل 15 تا Sample Code از جاهای مختلف دریافت کردم که همه شون روش درست برای فراخوانی تابع RasenumConnections رو نشون میدن فقط همه شون یه ایراد کوچک دارند. اون هم این که کار نمی کنند.

    این نمونه کد شما هم همینطوره. هر کاری می کنم نمیتونم کارش بندازم.
    بابا من یه تازه کارم. یکی یه کد تست شده بده لطفاً که خیلی لازم دارم.
    خیلی ممنون

تاپیک های مشابه

  1. خطای out of memory while expanding memory stream
    نوشته شده توسط m-khorsandi در بخش برنامه نویسی در Delphi
    پاسخ: 9
    آخرین پست: چهارشنبه 05 دی 1386, 15:21 عصر
  2. دلیل خطای Out of memory
    نوشته شده توسط Hossein Moradi در بخش برنامه نویسی در 6 VB
    پاسخ: 5
    آخرین پست: یک شنبه 14 اسفند 1384, 22:50 عصر
  3. out of memory
    نوشته شده توسط hosseinrp در بخش برنامه نویسی در 6 VB
    پاسخ: 7
    آخرین پست: شنبه 01 بهمن 1384, 02:31 صبح
  4. پیغام Qut Of Memory
    نوشته شده توسط ehsan_ansaripoor در بخش برنامه نویسی در 6 VB
    پاسخ: 3
    آخرین پست: یک شنبه 27 شهریور 1384, 12:34 عصر
  5. رفع خطای (بی ربط) !Out of memory
    نوشته شده توسط ع.م.خ در بخش برنامه نویسی در 6 VB
    پاسخ: 9
    آخرین پست: یک شنبه 21 فروردین 1384, 12:09 عصر

قوانین ایجاد تاپیک در تالار

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