program wrapper03; const US_STACKBUF_SIZE = 7; type int8_t = Shortint; UBool = int8_t; uint16_t = Word; int32_t = Longint; UChar = widechar; UChar_ptr = ^UChar; UnicodeString_ptr = ^UnicodeString; UnicodeString = object __vtable : pointer; fLength , fCapacity : int32_t; fArray : UChar_ptr; fFlags : uint16_t; fStackBuffer : array[0..US_STACKBUF_SIZE - 1 ] of UChar; end; function UnicodeString_New : UnicodeString_ptr; cdecl; external 'icu4pas36.dll' name 'UnicodeString_New_v1_3_6'; procedure UnicodeString_Delete(var obj : UnicodeString_ptr ); cdecl; external 'icu4pas36.dll' name 'UnicodeString_Delete_3_6'; procedure UnicodeString_Constructor(var return : UnicodeString ); cdecl; external 'icu4pas36.dll' name 'UnicodeString_Constructor_v1_3_6'; procedure UnicodeString_Destructor(var obj : UnicodeString ); cdecl; external 'icu4pas36.dll' name 'UnicodeString_Destructor_3_6'; function UnicodeString__setTo_v7( isTerminated : UBool; text : UChar_ptr; textLength : int32_t ) : UnicodeString_ptr; external 'icuuc36.dll' name '?setTo@UnicodeString@icu_3_6@@QAEAAV12@CPB_WH@Z'; var str ,ref : UnicodeString_ptr; text : WideString; from : UChar_ptr; BEGIN // Creation of UnicodeString C++ class instance str:=UnicodeString_New; // Assigning some text to UnicodeString class instance text:='Testing direct static call binding ...'; from:=@text[1 ]; asm mov eax ,-1 // textLength push eax mov eax ,[from ] // text push eax mov eax ,1 // isTerminated push eax mov ecx ,str // @self (this) call UnicodeString__setTo_v7 mov [ref] ,eax // result:=UnicodeString_ptr end; // Deletion of UnicodeString C++ class instance UnicodeString_Delete(str ); END.