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