testPharoBuffer
"self new testPharoBuffer "
    | buf addr  addr2 |
        buf := String new: 100000.
        addr := buf asNBExternalString.
        addr2 := ( NativeBoost allocate: 256 ).
        self testPharoBuffer: addr . " or use addr2, both of it does not
work"
        Transcript cr; show: buf.


have tried "addr readString"  / on addr2 .. too

Need to understand how to pass a memory location to the dll function stack
and get back what is written to the memory in Pharo in a more general sense.


On Tue, Jan 1, 2013 at 12:13 PM, S Krish
<[email protected]>wrote:

> I am trying to work with memory addresses back n forth..
>
> Simple case of char* buffer that needs to be filled in by dll . Buffer
> does not change in Pharo after the call. Am I missing something here..
>
> The memory address that is printed out does not match what I see in Pharo
> / infact the address does not change at all... for repeated call invoked
> from debugger.
>
> C Code:
>
> DLLEXPORT int readAndWritePipe(char* outBuf )
> {
>           system("Echo readAndWritePipe" );
>           debugPrintf ( "readAndWritePipe: %d \n" , &outBuf , 1046 );
>           memcpy ( outBuf , "Testing123\0" , 11) ;
>           return 0;
> }
>
> void debugPrintf ( char* logString, int intArg , char* strArg, int size )
> { // can redirect as needed to logger end point..
>              FILE * logFile = fopen( "c:\\temp\\writePipes.log" , "a" );
>              char* buf = (char*) calloc( sizeof(char) , size );
>              sprintf( buf, logString , intArg , strArg );
>              fputs(buf , logFile );
>              fclose(logFile);
> }
>
> Pharo:
>
> testPharoBuffer: buf
>
>     <primitive: #primitiveNativeCall module: #NativeBoostPlugin error:
> errorCode >
>      ^ self nbCall:  #( int readAndWritePipe( String buf  ) ) module:
> 'TestPharo.dll'
>
>
> testPharoBuffer
> "self new testPharoBuffer "
>     | buf addr  addr2 |
>         buf := String new: 100000.
>         addr := buf asNBExternalString.
>         addr2 := ( NativeBoost allocate: 256 ).
>         self testPharoBuffer: addr . " or use addr2, both of it does not
> work"
>         Transcript cr; show: buf.
>
>

Reply via email to