C++方法转换成C#语言实现

C++方法转换成C#语言实现

问题描述:

新手求教
以下C++函数,如何转化成C#实现?

bool Input::InputTest(char* szInput, unsigned long ulInLen, char* szOutput, unsigned long &ulLeftLen)
    {
        if (ulInLen < sizeof(StructA))
        {
            ulLeftLen = sizeof(StructA) - ulInLen;
            return false;
        }
        StructB* b1 = (StructB*)(&szInput[ulInLen - sizeof(StructB)]);
        StructA* pStructA = (StructA*)szInput;
        StructC* c = (StructC*)(szInput + sizeof(StructA));
        memcpy(szOutput, szInput + sizeof(StructA), sizeof(StructD));
        return true;
    }

public static object BytesToStruct(byte[] bytes, int pos, Type strcutType)
        {
            int size = Marshal.SizeOf(strcutType);
            IntPtr buffer = Marshal.AllocHGlobal(size);
            try
            {
                Marshal.Copy(bytes, pos, buffer, size);
                return Marshal.PtrToStructure(buffer, strcutType);
            }
            finally
            {
                Marshal.FreeHGlobal(buffer);
            }
        }

        public static int SizeOf(Type strcutType)
        {
            return Marshal.SizeOf(strcutType);
        }


        bool InputTest(byte[] szInput, int ulInLen, byte[] szOutput, ref int ulLeftLen)
        {
            if (ulInLen < SizeOf(typeof(StructA)))
            {
                ulLeftLen = SizeOf(typeof(StructA)) - ulInLen;
                return false;
            }
            StructB b1 = (StructB)BytesToStruct(szInput, ulInLen - SizeOf(typeof(StructB)), typeof(StructB));
            StructA pStructA = (StructA)BytesToStruct(szInput, 0, typeof(StructA));
            StructC c = (StructC)BytesToStruct(szInput, SizeOf(typeof(StructA)), typeof(StructC));

            Array.Copy(szInput, SizeOf(typeof(StructA)), szOutput, 0, SizeOf(typeof(StructD)));

            return true;
        }

看你怎么理解转换,首先,这是一个Input类的成员函数,这个函数带有this指针,本身就不能二进制兼容于C#
如果功能类似就可以,那么你照着写就好了,C#一般不用指针,类型转换一般依赖继承关系而不是这么野蛮地强转。