none
array<Byte>^ 怎样转为 unsigned char *? RRS feed

  • 问题

  • clr C++中的类型 array<Byte>^ 怎样转为 unsigned char *?

    查到网上的一种做法是:

    #include<windows.h>
    using namespace System;
    using namespace System::Runtime::InteropServices;
    #pragma comment( lib , "User32.lib" )
    int main(array<System::String ^> ^args)
    {
        array <Byte>^ arr = gcnew array<Byte>(128);
        for(int i=0;i<26;i++)
            arr[i]='a'+i;
        IntPtr p = Marshal::UnsafeAddrOfPinnedArrayElement( arr , 0 );
        ::MessageBoxA( 0 , (unsigned char *)p.ToPointer() , 0 , 0 );
        return 0;
    }
    
      我发现根本不行,显示不出来。


    前无古人,后无来者

    2020年8月21日 16:28

答案

  • 你好,

    感谢您在MSDN中文论坛发帖提问。

    >>array<Byte>^ 怎样转为 unsigned char *?

    我认为你可以尝试使用Marshal.Copy Method.

    我建议你可以尝试以下代码:

    //managed array
        array <Byte>^ arr = gcnew array<Byte>(128);
        for (int i = 0; i < 26; i++)
            arr[i] = 'a' + i;
    
    //unmanaged array
        unsigned char        unmanagerarray[128];
        ZeroMemory(unmanagerarray, 128);
    
    
        Marshal::Copy(arr, 0, IntPtr(unmanagerarray), arr->Length);

    Best Regards,

    Jeanine Zhang

            

    "Visual c++" forum will be migrating to a new home on Microsoft Q&A !
    We invite you to post new questions in the "Developing Universal Windows apps" forum’s new home on Microsoft Q&A !
    For more information, please refer to the sticky post.

    • 已标记为答案 clever101 2020年9月1日 12:02
    2020年8月24日 6:00
    版主