C# 如何在封送处理复制(字节,0,ptr,len)后返回数据?

C# 如何在封送处理复制(字节,0,ptr,len)后返回数据?,c#,.net,C#,.net,我们用过富利铜币。封送字节数组的代码-即:复制到非托管内存空间 Marshal.Copy(字节,0,ptr,len)? 如何将数据放回另一个程序中的字节数组中 如果我的方法正确,请给出建议:- string aString = "some text"; byte[] theBytes = System.Text.Encoding.Default.GetBytes(aString); // Marshal the managed struct to a native block o

我们用过富利铜币。封送字节数组的代码-即:复制到非托管内存空间

Marshal.Copy(字节,0,ptr,len)?

如何将数据放回另一个程序中的字节数组中

如果我的方法正确,请给出建议:-

string aString = "some text";
        byte[] theBytes = System.Text.Encoding.Default.GetBytes(aString);
// Marshal the managed struct to a native block of memory.
        int myByteSize = theBytes.Length;
        IntPtr pmyByte = Marshal.AllocHGlobal(myByteSize ); //this is pointer
        try
        {
            Marshal.Copy(theBytes, 0, pmyByte , myByteSize );
.............
接下来,我想将这个非托管内存中的数据检索到一个字符串变量中,如何实现这一点

在VB6中,我使用(对于希望将数据从c#.net传递到VB6应用程序的人可能会有所帮助):-


如何在C#.NET中提取封送数据?

此代码假定您知道非托管数据长度(
somearaySize
)和字符编码:

// create new managed array
var array = new byte[someArraySize];
// copy data from unmanaged memory, pointed by ptr, into managed array
Marshal.Copy(ptr, array, 0, someArraySize);
// convert array to string; this assumes, that array contains string in UTF-8 encoding
var s = Encoding.UTF8.GetString(array);

您是在询问如何将数据放入非托管内存,还是如何将
IntPtr
指向的内存复制回托管阵列?如果您不确切地告诉我们如何将指向数据的指针放入另一个程序,那么这个问题就没有意义了。它总是挂起,指针值与进程紧密关联,在另一个进程中无效。在.NET中,有很多方法可以进行进程互操作,其中没有一种是以Marshal.Copy()开头的。另一个应用是VB6应用,因此我使用wndproc并连接到windows消息,我正在使用sendmessage(p1、p2、p3、p4)结束。他可以使用BSTR方法,并用长度作为数据的前缀。@NathanM:He使用
Encoding.GetBytes
将数据传递到非托管内存中。在这种情况下,我怀疑他是否会返回
BSTR
。他可以即兴创作,手动预加长度,增加指针4个字节,然后复制数据。为什么这会被认为是疯狂的?如果我必须将内存传递给另一个程序,我可能会将它放入某种形式的结构中,使我能够确定它是什么。另一个选项是一个简单的空项。实际上,可能是更好的方法。好的,我将字符串设置为字节数组、获取大小、指针和调用Marshal.Copy(p1、p2、p3、p4)的方法正确吗?我做错什么了吗?
// create new managed array
var array = new byte[someArraySize];
// copy data from unmanaged memory, pointed by ptr, into managed array
Marshal.Copy(ptr, array, 0, someArraySize);
// convert array to string; this assumes, that array contains string in UTF-8 encoding
var s = Encoding.UTF8.GetString(array);