Dankn Ответов: 1

Как я могу перевести C# native memory copy byte array routine in to vb.net-да.


Как мне преобразовать это в VB.net


[DllImport("msvcrt.dll", EntryPoint = "memcpy", CallingConvention = CallingConvention.Cdecl, SetLastError = false)]
  static unsafe extern IntPtr memcpy(byte* dest, byte* src, uint count);

  /*
   * Callback function which copies the received data into the buffer and sets an event after the specified profiles
   */
   static unsafe void ProfileEvent(byte* data, uint uiSize, uint uiUserData)
     {
          if (uiSize > 0)
          {
              if (uiReceivedProfileCount < uiNeededProfileCount)
              {
                  //If the needed profile count not arrived: copy the new Profile in the buffer and increase the recived buffer count
                  uiProfileDataSize = uiSize;
                  // Copy the unmanaged data buffer (data) into the application
                  fixed (byte* dst = &abyProfileBuffer[uiReceivedProfileCount * uiSize])
                  {
                      memcpy(dst, data, uiSize);
                  }
                  uiReceivedProfileCount++;
              }

              if (uiReceivedProfileCount >= uiNeededProfileCount)
              {
                  //If the needed profile count is arived: set the event
                  hProfileEvent.Set();
              }
          }
      }


Что я уже пробовал:

С помощью CodeTranslator: перевод кода из VB.NET <-> C# <-> TypeScript <-> Java[^]

Придумывать:
Private Declare Function memcpy Lib "msvcrt.dll" Alias "memcpy" (ByVal dest As Byte, ByVal src As Byte, ByVal count As UInteger) As IntPtr

Private Shared Sub ProfileEvent(ByVal data As Byte, ByVal uiSize As UInteger, ByVal uiUserData As UInteger)
    If (uiSize > 0) Then
        If (bProfileReceived < uiNeededProfileCount) Then
            uiProfileDataSize = uiSize
            abyProfileBuffer((bProfileReceived * uiSize))
            memcpy(dst, data, uiSize)
            bProfileReceived = (bProfileReceived + 1)
        End If

        If (bProfileReceived >= uiNeededProfileCount) Then
            'If the needed profile count is arrived: set the event
            hProfileEvent.Set
        End If

    End If

End Sub


Честно говоря, это было не очень хорошо.

Он пропустил массив байт* все вместе.

На самом деле я думаю, что просто застрял на этом:
fixed (byte* dst = &abyProfileBuffer[uiReceivedProfileCount * uiSize])
                   {
                       memcpy(dst, data, uiSize);
                   }


Я погуглил
"fixed (byte*" vb.net


И нашел:
Преобразование фиксированных и байтовых* из c# в vb.net - переполнение стека[^]

и в конце концов я нашел:
https://social.technet.microsoft.com/wiki/contents/articles/24254.moving-memory-in-net-using-vb-and-the-cil.aspx[^]
Не знаю, как это использовать.

Любая помощь, чтобы заполнить кусочки головоломки?

1 Ответов

Рейтинг:
0

Richard MacCutchan

Видеть Эквивалент CopyMemory в .NET[^]