Note that there are some explanatory texts on larger screens.

plurals
  1. POUnbalanced stack when marshalling LPSTR and float
    text
    copied!<p>I'm using platform/invoke and I'm trying to marshal floats LPSTRs and int to a c++ function and I get the following error: A call to PInvoke function 'Game!Game.Graphics::CreateModel' has unbalanced the stack. This is likely because the managed PInvoke signature does not match the unmanaged target signature. Check that the calling convention and parameters of the PInvoke signature match the target unmanaged signature. Here is my c# code:</p> <pre><code>public struct Graphics { [DllImport(@"Graphics.dll", EntryPoint = "StartGL")] public static extern void StartGL(); [DllImport(@"Graphics.dll", EntryPoint = "CreateModel")] public static extern void CreateModel([MarshalAs(UnmanagedType.LPStr)]string ModelPath, [MarshalAs(UnmanagedType.LPStr)]string TexturePath,float xposh, float yposh, float zposh, float rotAngleh, float xroth, float yroth, float zroth); [DllImport(@"Graphics.dll", EntryPoint = "rotateModel")] public static extern void rotateModel(int id,float rotAngle,float x, float y, float z); } class Program { static void Main(string[] args) { OpenGL(); } static void OpenGL() { Graphics.CreateModel("box.obj","asd.png",0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f); Graphics.rotateModel(0,1.5707963267948966192313216916398f, 1.0f, 0.0f, 0.0f); Graphics.StartGL(); //end of program } </code></pre> <p>and the declaration of the c++ functions:</p> <pre><code>extern "C" __declspec(dllexport)void StartGL(); extern "C" __declspec(dllexport)void CreateModel(LPSTR ModelPath,LPSTR TexturePath,float xposh,float yposh,float zposh,float rotAngleh,float xroth,float yroth,float zroth) { m3Dobject mod = m3Dobject(ModelPath,TexturePath,xposh,yposh,zposh,rotAngleh,xroth,yroth,zroth); Models.push_back(mod); } extern "C" __declspec(dllexport)void moveModel(int id,float x,float y,float z) { Models[id].xpos = x; Models[id].ypos = y; Models[id].zpos = z; } extern "C" __declspec(dllexport)void rotateModel(int id,float rotAnglef,float x,float y,float z) { Models[id].rotAngle = rotAnglef; Models[id].xrot = x; Models[id].yrot = y; Models[id].zrot = z; } </code></pre> <p>Thanks for your help in advance.</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload