Я пишу приложение ac # / c ++, у которого возникли проблемы, когда я попытался передать структуру, содержащую только два числа с плавающей точкой.Например:
[DllImport("Resources\\CppInterface", EntryPoint = "?ReadDllTest@ScriptParserInterface@@YA?AVDllTest@@PAVScriptParser@@PB_W@Z", CharSet = CharSet.Unicode)]
private static extern DllTest ReadDllTestS(IntPtr scriptParser, string name);
Отлично работает, когда DLLTest содержит 3 или 4 числа с плавающей запятой.Однако, когда он содержит 2, intptr и пропущенный через него указатель на строку заканчиваются на 1 байт со смещением на стороне C ++.
Есть идеи, что может вызвать это?
Пример структуры структуры:
[StructLayout( LayoutKind.Sequential )]
public struct DllTest
{
public float a, b;/*, c, d; (works if c or/d are in)*/
DllTest( float i, float j )
{
a = i;
b = j;
}
}
C ++ сторона:
DllTest ScriptParserInterface::ReadDllTest( ScriptParser* scriptParser, const wchar_t* name )
{
return DllTest(); /* If only using two variables in DLLTest. scriptParser and name no longer work, but are located at *((&scriptParser)-1) and *((&name)-1)
}
Любые предложения будут очень признательны.Спасибо.