0

我正在研究Robert Giesecke从 Unrealscript 调用 C# DLL 函数的方法有什么可能。我也一直在关注位于 gamedev.net上的优秀示例。(好的,现在一切都来源了:)

我想将 C# 中的结构传递回包含字符串的 Unrealscript。我尝试了几件事,但都没有奏效,但我当前的 c# 结构如下所示:

    [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# 结构中的字符串信息传递回 Unrealscript?非常感谢任何提示和信息,我提前感谢大家。

4

0 回答 0