تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[سؤال] قمت بتحويل كود من VBA إلى VB.net ولكن ظهر خطأ عند AddressOf
#1
السلام عليكم ورحمة الله وبركاته
قمت بتحويل كود من VBA إلى VB.net ولكن ظهر خطأ عند AddressOf

هذا هو الكود كاملاً:
PHP كود :
Imports System.Runtime.InteropServices

Module Module1
    Private 
Const PAGE_EXECUTE_READWRITE = &H40

    Private 
Declare Sub MoveMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As ULongSource As ULongByVal Length As ULong)

 
   'Declare Sub MoveMemory Lib "KERNEL32" Alias "RtlMoveMemory" (ByVal hpvDest As Object, ByVal hpvSource As Object, ByVal cbCopy As Integer)

    ' 
   Private Declare Function VirtualProtect Lib "kernel32" (lpAddress As ULong,
 
   'ByVal dwSize As ULong, ByVal flNewProtect As ULong, lpflOldProtect As ULong) As ULong

    Declare Function VirtualProtect Lib "kernel32" (ByVal lpAddress As Long, ByVal dwSize As Long, ByVal flNewProtect As Long, ByRef lpflOldProtect As Long) As Long

    Private Declare Function GetModuleHandleA Lib "kernel32" (ByVal lpModuleName As String) As ULong

    Private Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As ULong,
ByVal lpProcName As String) As ULong

    Private Declare Function DialogBoxParam Lib "user32" Alias "DialogBoxParamA" (ByVal hInstance As ULong,
ByVal pTemplateName As ULong, ByVal hWndParent As ULong,
ByVal lpDialogFunc As ULong, ByVal dwInitParam As ULong) As Integer

    Dim HookBytes(0 To 11) As Byte
    Dim OriginBytes(0 To 11) As Byte
    Dim pFunc As ULong
    Dim Flag As Boolean

    Private Function GetPtr(ByVal Value As ULong) As ULong
        GetPtr = Value
    End Function

    Public Sub RecoverBytes()
        '
If Flag Then MoveMemory(Val(pFunc), Val((OriginBytes(0))), 12)
 
       If Flag Then MoveMemory(pFuncVarPtr(OriginBytes(0)), 12)
 
   End Sub

    
'Private Declare Function VarPtr Lib "vb40032.dll" Alias "VarPtr" (lpObject) As Long

    Public Function VarPtr(ByVal e As ULong) As ULong
        Dim GC As GCHandle = GCHandle.Alloc(e, GCHandleType.Pinned)
        Dim GC2 As ULong = GC.AddrOfPinnedObject.ToInt64
        GC.Free()
        Return GC2
    End Function

    Public Function Hook() As Boolean
        Dim TmpBytes(0 To 11) As Byte
        Dim p As ULong, osi As Byte
        Dim OriginProtect As ULong

        Hook = False

#If Win64 Then
        osi = 1
#Else
        osi = 0
#End If

        pFunc = GetProcAddress(GetModuleHandleA("user32.dll"), "DialogBoxParamA")

        '
MsgBox(pFunc)
 
       'MsgBox(PAGE_EXECUTE_READWRITE)
        '
MsgBox(OriginProtect)
 
       'MsgBox(VirtualProtect(pFunc, 12, PAGE_EXECUTE_READWRITE, OriginProtect))

        If VirtualProtect(pFunc, 12, PAGE_EXECUTE_READWRITE, OriginProtect) <> 0 Then

            '
MoveMemory((TmpBytes(0)), pFuncosi 1)
 
           MoveMemory(VarPtr(TmpBytes(0)), pFuncosi 1)
 
           If TmpBytes(osi) <> &HB8 Then

                
'MoveMemory((OriginBytes(0)), pFunc, 12)
                MoveMemory(VarPtr(OriginBytes(0)), pFunc, 12)

                '
GetPtr(AddressOf MyDialogBoxParam)
 
               p GetPtr(AddressOf MyDialogBoxParam)
 
               'p = GetPtr(MyDialogBoxParam(0, 0, 0, 0, 0))
                ' 
2385901325076

                If osi Then HookBytes
(0) = &H48
                HookBytes
(osi) = &HB8
                osi 
osi 1
                
'MoveMemory((HookBytes(osi)), (p), 4 * osi)
                MoveMemory(VarPtr(HookBytes(osi)), VarPtr(p), 4 * osi)

                HookBytes(osi + 4 * osi) = &HFF
                HookBytes(osi + 4 * osi + 1) = &HE0

                '
MoveMemory(pFunc, (HookBytes(0)), 12)
 
               MoveMemory(pFuncVarPtr(HookBytes(0)), 12)
 
               Flag True
                Hook 
True
            End 
If
 
       End If
 
   End Function

 
   Private Function MyDialogBoxParam(ByVal hInstance As ULong,
ByVal pTemplateName As ULongByVal hWndParent As ULong,
ByVal lpDialogFunc As ULongByVal dwInitParam As ULong) As Integer

        If pTemplateName 
4070 Then
            MyDialogBoxParam 
1
        Else
            RecoverBytes
()
 
           MyDialogBoxParam DialogBoxParam(hInstancepTemplateName,
 
                  hWndParentlpDialogFuncdwInitParam)
 
           Hook()
 
       End If
 
   End Function
End Module 

وهذه صورة الخطأ:
   


أرجو التكرم بالمساعدة في حل المشكلة
فاعلم أنه لا إله إلا الله
الرد }}}
تم الشكر بواسطة:
#2
اشرح عمل الكود او ما يفعل
فيمكن يوجد بديل اسهل في الدوت نت
الرد }}}
تم الشكر بواسطة:
#3
(14-08-21, 12:58 PM)y6767 كتب : اشرح عمل الكود او ما يفعل
فيمكن يوجد بديل اسهل في الدوت نت

أخي العزيز، أنا لا أبحث عن بديل، أنا أبحث عن حل لمشكلة
المشكلة في هذا السطر:
كود :
               p = GetPtr(AddressOf MyDialogBoxParam)

وكأن هنالك بارمتر يجب أن يضاف للسطر السابق
فاعلم أنه لا إله إلا الله
الرد }}}
تم الشكر بواسطة:
#4
https://stackoverflow.com/a/17974850
الرد }}}
تم الشكر بواسطة:
#5
https://exceloffthegrid.com/removing-cra...s-with-vba
الرد }}}
تم الشكر بواسطة:
#6
(14-08-21, 03:20 PM)y6767 كتب : https://exceloffthegrid.com/removing-cra...s-with-vba

شكراً لك، ولكن لا علاقة لما هو موجود في هذا الرابط بمشكلتي
فاعلم أنه لا إله إلا الله
الرد }}}
تم الشكر بواسطة:
#7
اصرارك على AddressOf اعاق تجاوزك للمشكله
لو نظرت الكود في الرابط لوجدت السطر
pFunc = GetProcAddress(GetModuleHandleA("user32.dll"), "DialogBoxParamA")
الرد }}}
تم الشكر بواسطة:
#8
(14-08-21, 03:38 PM)y6767 كتب : اصرارك على AddressOf اعاق تجاوزك للمشكله
لو نظرت الكود في الرابط لوجدت السطر
pFunc = GetProcAddress(GetModuleHandleA("user32.dll"), "DialogBoxParamA")

الكود السابق هو نفس كودي، انزل للأسفل قليلاً وستجد هذا السطر نفسه:

كود :
p = GetPtr(AddressOf MyDialogBoxParam)
فاعلم أنه لا إله إلا الله
الرد }}}
تم الشكر بواسطة:
#9
اخي لا يوجد في الدت نت
(AddressOf MyDialogBoxParam)
ف AddressOf هنا غير مقبوله في الدوت نت
الرد }}}
تم الشكر بواسطة:
#10
(14-08-21, 03:46 PM)y6767 كتب : اخي لا يوجد في الدت نت
(AddressOf MyDialogBoxParam)
ف AddressOf هنا غير مقبوله في الدوت نت

ما البديل إذن للسطر التالي؟
كود :
              p = GetPtr(AddressOf MyDialogBoxParam)
فاعلم أنه لا إله إلا الله
الرد }}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  مطلوب كود تفقيط الارقام للحروف ولكن للجرام والملى جرام alazhry 2 694 22-10-22, 04:46 AM
آخر رد: Taha Okla
  يتم الحفظ ولكن دون الترتيب بالرقم - كيف اجبره على الحفظ بالترتب ؟ a.amin 9 3,894 10-07-21, 12:54 PM
آخر رد: Lathe1
  سؤال صعب عليه ولكن اعلم انه لم يخفي عليكم اتمني مشاركه الاخ ابو روضه والاخوه الافاضل اليوم السابع 1 1,790 21-08-20, 07:47 PM
آخر رد: ابو روضة
  [VB.NET] تم عمل برنامج شات ولكن اسامه الهرماوي 0 957 26-05-20, 08:38 PM
آخر رد: اسامه الهرماوي
  اكتب الكود بشكل صحيح ولكن يظهر خطاء رجاء المساعده اليوم السابع 6 2,625 30-01-20, 04:28 PM
آخر رد: ابو روضة
  اريد معرفه شئ صعب شويه ولكن لم يصعب عليكم اتمني مشاركه الاخ ابوروضه اليوم السابع 4 2,065 21-01-20, 05:26 PM
آخر رد: ابو روضة
Exclamation [VB.NET] أداة تشبه أداة NumericUpDown ولكن بأرقام عشرية سميـر 6 1,935 17-09-19, 06:43 PM
آخر رد: ابراهيم ايبو
  الكود يعمل بشكل صحيح ولكن خالد كامل1 5 1,957 18-08-19, 04:43 AM
آخر رد: خالد كامل1
  [VB.NET] كيف اقوم بتحويل bolean الي string في داتا جريد فيو alipro 1 1,410 23-09-18, 08:38 AM
آخر رد: عبدالله الدوسري
  [سؤال] أحاول أخذ باك أب لقاعدة البيانات من نوع mySQL ولكن لا أستطيع مرفق الكود dametucorazon 12 4,456 21-06-18, 05:19 AM
آخر رد: dametucorazon

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم