Having trouble using CTypes with a custom function

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • tkondal@gmail.com

    #1

    Having trouble using CTypes with a custom function

    Hi all.

    I just started looking at Python's ctypes lib and I am having trouble
    using it for a function.

    For starters, here's my Python code:


    from ctypes import*;
    myStringDLL= cdll.LoadLibrar y("myStringDLL. dll");

    GetMyString = getattr(myStrin gDLL,
    "?GetMyString@@ YA_NAAV?$basic_ string@DU?$char _traits@D@std@@ V?$allocator@D@ 2@@std@@@Z")

    strString = create_string_b uffer('\000' * 256);
    GetMyString.res type = c_int;
    GetMyString.arg types = [c_char_p];

    bResult = GetMyString (strSerialNumbe r);

    print (bResult);
    print (strSerialNumbe r);

    #C++ Prototype of the function I want to call:
    #bool GetMyString (string& stringParam) ;




    I do not have access to the source code of this function so don't ask
    me to try different things in C++. This DLL is working fine.

    The problem that I have is that print (strSerialNumbe r) does not seem
    to print the correct string. What I get is some garbage value of
    unprintable characters. Am I using this the correct way?

    Thanks.

  • Chris Mellon

    #2
    Re: Having trouble using CTypes with a custom function

    On 4 Oct 2006 11:18:16 -0700, tkondal@gmail.c om <tkondal@gmail. comwrote:
    Hi all.
    >
    I just started looking at Python's ctypes lib and I am having trouble
    using it for a function.
    >
    For starters, here's my Python code:
    >
    >
    from ctypes import*;
    myStringDLL= cdll.LoadLibrar y("myStringDLL. dll");
    >
    GetMyString = getattr(myStrin gDLL,
    "?GetMyString@@ YA_NAAV?$basic_ string@DU?$char _traits@D@std@@ V?$allocator@D@ 2@@std@@@Z")
    >
    strString = create_string_b uffer('\000' * 256);
    GetMyString.res type = c_int;
    GetMyString.arg types = [c_char_p];
    >
    bResult = GetMyString (strSerialNumbe r);
    >
    print (bResult);
    print (strSerialNumbe r);
    >
    #C++ Prototype of the function I want to call:
    #bool GetMyString (string& stringParam) ;
    >
    >
    >
    >
    I do not have access to the source code of this function so don't ask
    me to try different things in C++. This DLL is working fine.
    >
    The problem that I have is that print (strSerialNumbe r) does not seem
    to print the correct string. What I get is some garbage value of
    unprintable characters. Am I using this the correct way?
    >



    This function is expecting a C++ std::string object, not a regular C
    style string. You'll need a wrapper function, and one which uses the
    same compiler and STL as the C++ source.

    Comment

    • tkondal@gmail.com

      #3
      Re: Having trouble using CTypes with a custom function

      Would you have any example of a wrapper for such data types?

      Thanks.

      Chris Mellon wrote:
      On 4 Oct 2006 11:18:16 -0700, tkondal@gmail.c om <tkondal@gmail. comwrote:
      Hi all.

      I just started looking at Python's ctypes lib and I am having trouble
      using it for a function.

      For starters, here's my Python code:


      from ctypes import*;
      myStringDLL= cdll.LoadLibrar y("myStringDLL. dll");

      GetMyString = getattr(myStrin gDLL,
      "?GetMyString@@ YA_NAAV?$basic_ string@DU?$char _traits@D@std@@ V?$allocator@D@ 2@@std@@@Z")

      strString = create_string_b uffer('\000' * 256);
      GetMyString.res type = c_int;
      GetMyString.arg types = [c_char_p];

      bResult = GetMyString (strSerialNumbe r);

      print (bResult);
      print (strSerialNumbe r);

      #C++ Prototype of the function I want to call:
      #bool GetMyString (string& stringParam) ;




      I do not have access to the source code of this function so don't ask
      me to try different things in C++. This DLL is working fine.

      The problem that I have is that print (strSerialNumbe r) does not seem
      to print the correct string. What I get is some garbage value of
      unprintable characters. Am I using this the correct way?
      >
      >
      >
      >
      This function is expecting a C++ std::string object, not a regular C
      style string. You'll need a wrapper function, and one which uses the
      same compiler and STL as the C++ source.
      >

      Comment

      • Chris Mellon

        #4
        Re: Having trouble using CTypes with a custom function

        <please don't top post>

        On 4 Oct 2006 11:35:11 -0700, tkondal@gmail.c om <tkondal@gmail. comwrote:
        Would you have any example of a wrapper for such data types?
        >
        Thanks.
        >
        Chris Mellon wrote:
        On 4 Oct 2006 11:18:16 -0700, tkondal@gmail.c om <tkondal@gmail. comwrote:
        Hi all.
        >
        I just started looking at Python's ctypes lib and I am having trouble
        using it for a function.
        >
        For starters, here's my Python code:
        >
        >
        from ctypes import*;
        myStringDLL= cdll.LoadLibrar y("myStringDLL. dll");
        >
        GetMyString = getattr(myStrin gDLL,
        "?GetMyString@@ YA_NAAV?$basic_ string@DU?$char _traits@D@std@@ V?$allocator@D@ 2@@std@@@Z")
        >
        strString = create_string_b uffer('\000' * 256);
        GetMyString.res type = c_int;
        GetMyString.arg types = [c_char_p];
        >
        bResult = GetMyString (strSerialNumbe r);
        >
        print (bResult);
        print (strSerialNumbe r);
        >
        #C++ Prototype of the function I want to call:
        #bool GetMyString (string& stringParam) ;
        >
        >
        >
        >
        I do not have access to the source code of this function so don't ask
        me to try different things in C++. This DLL is working fine.
        >
        The problem that I have is that print (strSerialNumbe r) does not seem
        to print the correct string. What I get is some garbage value of
        unprintable characters. Am I using this the correct way?
        >



        This function is expecting a C++ std::string object, not a regular C
        style string. You'll need a wrapper function, and one which uses the
        same compiler and STL as the C++ source.
        >
        in this case it'd be very simple:

        bool WrapGetMyString (char * c) {
        return GetMyString(c)
        }


        (Note: This isn't unicode safe).

        The C++ compiler will handle converting from the char * to the std::string.




        Comment

        • tkondal@gmail.com

          #5
          Re: Having trouble using CTypes with a custom function

          Hi Chris.

          I know that it is easy to fix the problem using C++. However, I do not
          want to code a wrapper DLL. I was wondering if there was a workaround
          with Python. Everything has to be done in Python as we do not have the
          tools for C++ (and we are not planning on getting any).

          Thanks.

          Chris Mellon wrote:
          <please don't top post>
          >
          On 4 Oct 2006 11:35:11 -0700, tkondal@gmail.c om <tkondal@gmail. comwrote:
          Would you have any example of a wrapper for such data types?

          Thanks.

          Chris Mellon wrote:
          On 4 Oct 2006 11:18:16 -0700, tkondal@gmail.c om <tkondal@gmail. comwrote:
          Hi all.

          I just started looking at Python's ctypes lib and I am having trouble
          using it for a function.

          For starters, here's my Python code:


          from ctypes import*;
          myStringDLL= cdll.LoadLibrar y("myStringDLL. dll");

          GetMyString = getattr(myStrin gDLL,
          "?GetMyString@@ YA_NAAV?$basic_ string@DU?$char _traits@D@std@@ V?$allocator@D@ 2@@std@@@Z")

          strString = create_string_b uffer('\000' * 256);
          GetMyString.res type = c_int;
          GetMyString.arg types = [c_char_p];

          bResult = GetMyString (strSerialNumbe r);

          print (bResult);
          print (strSerialNumbe r);

          #C++ Prototype of the function I want to call:
          #bool GetMyString (string& stringParam) ;




          I do not have access to the source code of this function so don't ask
          me to try different things in C++. This DLL is working fine.

          The problem that I have is that print (strSerialNumbe r) does not seem
          to print the correct string. What I get is some garbage value of
          unprintable characters. Am I using this the correct way?

          >
          >
          >
          >
          This function is expecting a C++ std::string object, not a regular C
          style string. You'll need a wrapper function, and one which uses the
          same compiler and STL as the C++ source.
          >
          Thanks.

          --
          >
          in this case it'd be very simple:
          >
          bool WrapGetMyString (char * c) {
          return GetMyString(c)
          }
          >
          >
          (Note: This isn't unicode safe).
          >
          The C++ compiler will handle converting from the char * to the std::string.
          >
          >
          >
          >
          >

          Comment

          • sjdevnull@yahoo.com

            #6
            Re: Having trouble using CTypes with a custom function

            tkondal@gmail.c om wrote:
            Hi all.
            >
            I just started looking at Python's ctypes lib and I am having trouble
            using it for a function.
            [...]
            #C++ Prototype of the function I want to call:
            ctypes provides support for calling functions in C libraries, using C
            datatypes. I don't see any reason to believe it would work with other
            languages (e.g. C++).

            Comment

            Working...