Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. General Programming
  3. C#
  4. p/invoke _stat

p/invoke _stat

Scheduled Pinned Locked Moved C#
csharptutorialquestion
14 Posts 3 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • D DanielWehrle

    No sorry it is only fclose on the linkt, I check pinvoke.net before my post and did not find anything.

    L Offline
    L Offline
    Lost User
    wrote on last edited by
    #4

    DanielWehrle wrote:

    it is only fclose on the link

    Yes, I know that, but if you look at the sample you should be able to figure out how to code the call for the _stat() function.

    I must get a clever new signature for 2011.

    D 2 Replies Last reply
    0
    • L Lost User

      DanielWehrle wrote:

      it is only fclose on the link

      Yes, I know that, but if you look at the sample you should be able to figure out how to code the call for the _stat() function.

      I must get a clever new signature for 2011.

      D Offline
      D Offline
      DanielWehrle
      wrote on last edited by
      #5

      The pure _stat call is not my reral problem, but I have no idear how to define the struct containing the _stat result

      1 Reply Last reply
      0
      • L Lost User

        DanielWehrle wrote:

        it is only fclose on the link

        Yes, I know that, but if you look at the sample you should be able to figure out how to code the call for the _stat() function.

        I must get a clever new signature for 2011.

        D Offline
        D Offline
        DanielWehrle
        wrote on last edited by
        #6

        I try to do itz like: [StructLayout(LayoutKind.Sequential)] public struct STAT { public uint st_dev; public ushort st_ino; public ushort st_mode; public short st_nlink; public short st_uid; public short st_gid; public uint st_rdev; public long st_size; public long st_atime; public long st_mtime; public long st_ctime; } [DllImport("msvcrt.dll", SetLastError = true)] static extern int _stat(string file, ref STAT buf); But recive an PInvoke Imbalance Exception.

        T L 2 Replies Last reply
        0
        • D DanielWehrle

          I try to do itz like: [StructLayout(LayoutKind.Sequential)] public struct STAT { public uint st_dev; public ushort st_ino; public ushort st_mode; public short st_nlink; public short st_uid; public short st_gid; public uint st_rdev; public long st_size; public long st_atime; public long st_mtime; public long st_ctime; } [DllImport("msvcrt.dll", SetLastError = true)] static extern int _stat(string file, ref STAT buf); But recive an PInvoke Imbalance Exception.

          T Offline
          T Offline
          Tony Richards
          wrote on last edited by
          #7

          Have you checked the calling convention? The last time I got an error like this, this was the reason. Oh, and please use <pre></pre> to make your code clearer

          D 1 Reply Last reply
          0
          • D DanielWehrle

            I try to do itz like: [StructLayout(LayoutKind.Sequential)] public struct STAT { public uint st_dev; public ushort st_ino; public ushort st_mode; public short st_nlink; public short st_uid; public short st_gid; public uint st_rdev; public long st_size; public long st_atime; public long st_mtime; public long st_ctime; } [DllImport("msvcrt.dll", SetLastError = true)] static extern int _stat(string file, ref STAT buf); But recive an PInvoke Imbalance Exception.

            L Offline
            L Offline
            Lost User
            wrote on last edited by
            #8

            DanielWehrle wrote:

            But recive an PInvoke Imbalance Exception.

            If you have an exception, it really is better if you post the exact text that you receive, rather than your interpretation of it. Also the line(s) of code that caused the exception; always included within <pre></pre> tags for readability.

            I must get a clever new signature for 2011.

            D 1 Reply Last reply
            0
            • T Tony Richards

              Have you checked the calling convention? The last time I got an error like this, this was the reason. Oh, and please use <pre></pre> to make your code clearer

              D Offline
              D Offline
              DanielWehrle
              wrote on last edited by
              #9

              Yes but I'm not sure what the calling conventions for the _stat call are. All I know is from: http://msdn.microsoft.com/en-us/library/14h5k7ff%28vs.71%29.aspx

              1 Reply Last reply
              0
              • L Lost User

                DanielWehrle wrote:

                But recive an PInvoke Imbalance Exception.

                If you have an exception, it really is better if you post the exact text that you receive, rather than your interpretation of it. Also the line(s) of code that caused the exception; always included within <pre></pre> tags for readability.

                I must get a clever new signature for 2011.

                D Offline
                D Offline
                DanielWehrle
                wrote on last edited by
                #10

                PInvokeStackImbalance
                Message: A call to PInvoke function 'SharpFastStatWrite!SharpFastStatWrite.Writer::_stat' 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.

                Thanks

                L 2 Replies Last reply
                0
                • D DanielWehrle

                  PInvokeStackImbalance
                  Message: A call to PInvoke function 'SharpFastStatWrite!SharpFastStatWrite.Writer::_stat' 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.

                  Thanks

                  L Offline
                  L Offline
                  Lost User
                  wrote on last edited by
                  #11

                  Well this took me some time to figure out but I finally noticed that the function prototype for _stat is

                  int __cdecl _stat(_In_z_ const char * _Name, _Out_ struct _stat32 * _Stat);

                  and that __cdecl is not the standard calling convention. So I changed the DLLImport as follows

                  \[DllImport("msvcrt.dll", SetLastError = true, CallingConvention=CallingConvention.Cdecl)\]
                  

                  and it now works. Give it a try.

                  I must get a clever new signature for 2011.

                  1 Reply Last reply
                  0
                  • D DanielWehrle

                    PInvokeStackImbalance
                    Message: A call to PInvoke function 'SharpFastStatWrite!SharpFastStatWrite.Writer::_stat' 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.

                    Thanks

                    L Offline
                    L Offline
                    Lost User
                    wrote on last edited by
                    #12

                    Further information, the STAT structure should be as follows:

                    public struct STAT
                    {
                    public uint st_dev;
                    public ushort st_ino;
                    public ushort st_mode;
                    public short st_nlink;
                    public short st_uid;
                    public short st_gid;
                    public uint st_rdev;
                    public uint st_size;
                    public uint st_atime;
                    public uint st_mtime;
                    public uint st_ctime;
                    }

                    Note the last four entries are uint rather than long values.

                    I must get a clever new signature for 2011.

                    D 1 Reply Last reply
                    0
                    • L Lost User

                      Further information, the STAT structure should be as follows:

                      public struct STAT
                      {
                      public uint st_dev;
                      public ushort st_ino;
                      public ushort st_mode;
                      public short st_nlink;
                      public short st_uid;
                      public short st_gid;
                      public uint st_rdev;
                      public uint st_size;
                      public uint st_atime;
                      public uint st_mtime;
                      public uint st_ctime;
                      }

                      Note the last four entries are uint rather than long values.

                      I must get a clever new signature for 2011.

                      D Offline
                      D Offline
                      DanielWehrle
                      wrote on last edited by
                      #13

                      Thanks, now it work.

                      L 1 Reply Last reply
                      0
                      • D DanielWehrle

                        Thanks, now it work.

                        L Offline
                        L Offline
                        Lost User
                        wrote on last edited by
                        #14

                        You're welcome; perhaps you would be so kind as to vote my answer (the one with the solution)?

                        I must get a clever new signature for 2011.

                        1 Reply Last reply
                        0
                        Reply
                        • Reply as topic
                        Log in to reply
                        • Oldest to Newest
                        • Newest to Oldest
                        • Most Votes


                        • Login

                        • Don't have an account? Register

                        • Login or register to search.
                        • First post
                          Last post
                        0
                        • Categories
                        • Recent
                        • Tags
                        • Popular
                        • World
                        • Users
                        • Groups