Pointer stuff
BlitzMax Forums/BlitzMax Programming/Pointer stuff
| ||
I'm trying to convert a Blitz String into an int so that I can pass it to a DLL. e.g. t:String = "Hello" A:int = 0 A = t.ToCString I used to do it this way: Int(StringToCString(t$)) and used to convert back via CStringToString$(retval) but this no longer works. No matter how I slice it, I can't get a simple int with the memory address I want to pass. Just convertion errors. Any Idea's what I'm doing wrong. |
| ||
Shouldn't it be Byte Ptr not Int? |
| ||
I'm just passing straight ints:Extern Function StdCall0(bbfunction) Function StdCall1(bbfunction,a0) Function StdCall2(bbfunction,a0,a1) Function StdCall3(bbfunction,a0,a1,a2) Function StdCall4(bbfunction,a0,a1,a2,a3) Function StdCall5(bbfunction,a0,a1,a2,a3,a4) Function StdCall6(bbfunction,a0,a1,a2,a3,a4,a5) Function StdCall7(bbfunction,a0,a1,a2,a3,a4,a5,a6) End Extern These can either be interpreted as values or memory pointers depending on the DLL function. It is used by functions like so: Function AddLabel%(t$,x%,y%,w%,h%,P%) Return StdCall6(DllFunction(lib%,"AddLabel"),Int Varptr(t$),x,y,w,h,p) End Function Int(ConvertToCString()) used to do it, but was removed when blitz strings went to objects. int(MyString.ToCString) gives an error. It's a bit frustrating to have an entire working system that have the rug move under you and then not being able to figure out how to make it work again. |
| ||
ToCString is a method, it should be ToCString() |
| ||
this looks as though it's working (oops 3 secs to slow, beaten by the vowel man...):Strict Local t:String = "Hello" Local a:Int = 0 a=Int(t.ToCString()) Print a End |
| ||
Great. Most of the Way there. So how do you convert a CString Back to a Blitz one when you get an int returned as the pointer? |
| ||
Strict Local t:String = "Hello" Local a:Int = 0 a=Int(t.ToCString()) Print a Local b$=String.FromCString(Byte Ptr(a)) Print b End |
| ||
Right it's all working again now. Thanks for all your help! I'll make another thread for the demo! |
| ||
if you want to tidy up your dll calls, there's some discussion here that might be of interest including declaring stdcall function pointer prototypes: http://www.blitzbasic.com/Community/posts.php?topic=41803 |
| ||
Thanks I'll take a look. The demo has been posted if you're interested to see what it's used for... |