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.