469,572 Members | 1,308 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 469,572 developers. It's quick & easy.

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.LoadLibrary("myStringDLL.dll");

GetMyString = getattr(myStringDLL,
"?GetMyString@@YA_NAAV?$basic_string@DU?$char_trai ts@D@std@@V?$allocator@D@2@@std@@@Z")

strString = create_string_buffer('\000' * 256);
GetMyString.restype = c_int;
GetMyString.argtypes = [c_char_p];

bResult = GetMyString (strSerialNumber);

print (bResult);
print (strSerialNumber);

#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 (strSerialNumber) 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.

Oct 4 '06 #1
5 3252
On 4 Oct 2006 11:18:16 -0700, tk*****@gmail.com <tk*****@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.LoadLibrary("myStringDLL.dll");

GetMyString = getattr(myStringDLL,
"?GetMyString@@YA_NAAV?$basic_string@DU?$char_trai ts@D@std@@V?$allocator@D@2@@std@@@Z")

strString = create_string_buffer('\000' * 256);
GetMyString.restype = c_int;
GetMyString.argtypes = [c_char_p];

bResult = GetMyString (strSerialNumber);

print (bResult);
print (strSerialNumber);

#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 (strSerialNumber) 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.

--
http://mail.python.org/mailman/listinfo/python-list
Oct 4 '06 #2
Would you have any example of a wrapper for such data types?

Thanks.

Chris Mellon wrote:
On 4 Oct 2006 11:18:16 -0700, tk*****@gmail.com <tk*****@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.LoadLibrary("myStringDLL.dll");

GetMyString = getattr(myStringDLL,
"?GetMyString@@YA_NAAV?$basic_string@DU?$char_trai ts@D@std@@V?$allocator@D@2@@std@@@Z")

strString = create_string_buffer('\000' * 256);
GetMyString.restype = c_int;
GetMyString.argtypes = [c_char_p];

bResult = GetMyString (strSerialNumber);

print (bResult);
print (strSerialNumber);

#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 (strSerialNumber) 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.

--
http://mail.python.org/mailman/listinfo/python-list
Oct 4 '06 #3
<please don't top post>

On 4 Oct 2006 11:35:11 -0700, tk*****@gmail.com <tk*****@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, tk*****@gmail.com <tk*****@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.LoadLibrary("myStringDLL.dll");
>
GetMyString = getattr(myStringDLL,
"?GetMyString@@YA_NAAV?$basic_string@DU?$char_trai ts@D@std@@V?$allocator@D@2@@std@@@Z")
>
strString = create_string_buffer('\000' * 256);
GetMyString.restype = c_int;
GetMyString.argtypes = [c_char_p];
>
bResult = GetMyString (strSerialNumber);
>
print (bResult);
print (strSerialNumber);
>
#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 (strSerialNumber) 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.
>
--
http://mail.python.org/mailman/listinfo/python-list
>
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.


--
http://mail.python.org/mailman/listinfo/python-list
Oct 4 '06 #4
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, tk*****@gmail.com <tk*****@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, tk*****@gmail.com <tk*****@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.LoadLibrary("myStringDLL.dll");

GetMyString = getattr(myStringDLL,
"?GetMyString@@YA_NAAV?$basic_string@DU?$char_trai ts@D@std@@V?$allocator@D@2@@std@@@Z")

strString = create_string_buffer('\000' * 256);
GetMyString.restype = c_int;
GetMyString.argtypes = [c_char_p];

bResult = GetMyString (strSerialNumber);

print (bResult);
print (strSerialNumber);

#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 (strSerialNumber) 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.

--
http://mail.python.org/mailman/listinfo/python-list

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.


--
http://mail.python.org/mailman/listinfo/python-list
Oct 4 '06 #5
tk*****@gmail.com 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++).

Oct 4 '06 #6

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

14 posts views Thread by Gregory L. Hansen | last post: by
3 posts views Thread by Martin P. Hellwig | last post: by
4 posts views Thread by Richard Jones | last post: by
1 post views Thread by sjdevnull | last post: by
6 posts views Thread by Jack | last post: by
reply views Thread by JimPGH | last post: by
reply views Thread by suresh191 | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.