Retrieving a string from a c file

Miscellaneous Forums/Win32 Discussion/Retrieving a string from a c file

I'm trying to Import a C file and read in a string value from inside it using Extern. It works fine with Integer's etc but when I try and use a string I just get an Unhandled Memory Exception Error.

I threw a simple example together to show what I mean:

test.bmx
Import "test.c"

Extern

Global myString$ = "myString"

End Extern

DebugLog myString


test.c
char myString[] = "testing";


Thanks,
Chris

try doing
Global myString$ = FromCString(MyString)


Thanks Perturbatio, not working 100% yet though. If I modify the code to this:

Import "test.cpp"

Extern

Global myString:Byte Ptr = "myString"

End Extern

DebugLog String.FromCString( myString )

Then it works fine, but I'd rather it held the correct value automatically so I don't have to call FromCString( ) every time, or even once to update the value.

I can't appear to use the FromCString( ) method inside the Extern block so I'm not sure if this is possible or not.

Regards,
Chris

How about:
Import "test.cpp"

Global myString:String

Extern

Global myCString:Byte Ptr = "myString"

End Extern

myString.FromCString(myCString)

DebugLog myString


I'd rather not because then I have to call myString.FromCString(myCString) every time the value changes. For example:

' create an open file dialog and allow user to select a file
result = fuiOpenDialog(  )

' function succeeded
if result = true
     DebugLog currentFile$
endif

fuiOpenDialog( ) would be an Extern Function, and in the C file where the real fuiOpenDialog( ) function is called it assigns the selected filename to a variable called currentFile.

Hope that makes sense, all I'm basically saying is that the value will be changing all the time and it would be nice to just be able to use the string which is directly linked to the equivilant C variable.

I ploughed through all the blitz source code looking for a solution and noticed that the "blitz.mod" actually uses a series of BBClass, BBString and BBChar structs and typedefs to store strings which explains why it won't let me easily retrieve a string, but I don't really feel like including all those header files etc just so I can use the BBString struct to create my strings :P

Regards,
Chris

I also have this problem.

http://blitzbasic.com/Community/posts.php?topic=42316

Looking at some of the other modules I think you should be able do something like this
import "test.c"

Extern
    Function XXfuiOpenDialog:Byte Ptr() = "fuiOpenDialog()"
End Extern

Function fuiOpenDialog:String()
    return String.fromCString(XXfuiOpenDialog())
End Function


But I can't seem to get it working.

Hi teamonkey,

To do it with a function the way you want you do this:

code.c
char *myFunction(  ) {
    return "this";
}

code.bmx
Import "code.c"

Extern

Function myFunction$z(  )

End Extern

Then just call the function to get the string..

DebugLog myFunction(  )

I don't really know why it works ok with functions but not variables.. I'll have to look into it a bit more!

Regards,
Chris

in c

extern "C" int bb_icanseeyou=808;
...


in max

print icanseeyou

prints 808