如何编组一个带有字符串的结构,从C#到unrealscript?

时间:2013-12-20 16:22:07

标签: c# string struct marshalling unrealscript

我正在研究Robert Giesecke's approach从Unrealscript调用C#DLL函数的可能性。我一直在关注好的例子Located at gamedev.net。 (好的,现在一切都来自:)

我想将C#中的结构传递给包含字符串的Unrealscript。我已经尝试过几个东西,其中没有一个有效,但我现在的c#struct看起来像这样:

    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
    struct PSTest
    {
        public float a;
        public int b;
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
        public string c;
    }

..我的其他C#代码如下所示:

    private static IntPtr MarshalToPointer(object data)
    {
        IntPtr buf = Marshal.AllocHGlobal(
            Marshal.SizeOf(data));
        Marshal.StructureToPtr(data,
            buf, false);
        return buf;
    }

    [DllExport("ReturnTesting", CallingConvention = CallingConvention.StdCall)]
    static IntPtr ReturnTesting()
    {
        PSTest ps = new PSTest();
        ps.a = 1.0f;
        ps.b = 2;
        ps.c = "a";

        IntPtr lpstruct = MarshalToPointer(ps);
        return lpstruct;
    }

我从UnrealScript调用这些函数,我的UnrealScript如下所示:

struct MYTest
{
var float a;
var int b;
var string c;
};

dllimport final function MYTest ReturnTesting();

function DoWork()
{
    local MYTest my;

    my = ReturnTesting();
}

这里的Unrealscript有点简化,但它确实有用。

当我执行Unrealscript时,结构从ReturnTesting()返回,其中包含变量a和b中的float和int值的有效数据,但变量c是空字符串。这是我已经获得此代码的最佳情况,因为结构中的字符串变量通常会导致崩溃。

有没有人有类似情况的经验?如何正确地将我的c#struct中的字符串信息传递回Unrealscript?任何提示和信息都非常感谢,我提前感谢所有人。

0 个答案:

没有答案