我正在研究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?非常感谢任何提示和信息,我提前感谢大家。