Tesko ces to. Morao bi da ga menjas na isti nacin na koji menjas nArray, tako sto menjas postojece memorijske lokacije koje zauzima string pozivaca. LPSTR je u osnovi char*, pointer na niz karaktera terminisan nulom. Tako da mozda bi mogao da ubacis "Perica\0" umesto "Slavomir\0" jer je krace, ali ne bi smeo da stavis "Slavomir\0" umesto "Perica\0" jer ces verovatno pregaziti neki drugi buffer, mozda cak i izazvati segfault. Kad se stringovi vracaju pozivacu u c/C++u to se radi preko char** i slicnih tako da je vrlo verovatno da ni pozivao nece registrovati da si mu promenio string jer to ne ocekuje.
Ajd sad da probamo sledece.
1. Napravi solution gde imas c++/CLI wrapper i drugi managed projekat koji se poziva iz c++-a, kao onaj projekat u kojem dobijas fatal error. Sve izbilduj u debug modu.
2. Prebaci VS debager da hvata exceptione pre procesiranja. TO radis tako sto u Debug meniju izaberes "Exceptions" i "Common Language Runtime Exceptions" prebacis na Thrown. (posle ti to vrati na off da te ne smara za druge projekte). Ovo znaci da ce VS da breakuje program na prvoj debugable liniji u kojoj nastane exception, u nasem slucaju pre nego sto ga manage/unmanaged thunk pretvori u fatal error.
3a. Treba da pokrenes userhook u debug modu, a kako to uraditi zavisi od toga sta je userhook? Ako je exe koji pozivas iz komandne linije onda ga stavi u debug folder C++ projekta gde je c++ DLL (tu prebaci managed dll i pdb, nek ti pdb uvek ide u pratnji). Nek ti C++ projekat bude startup projekat. Udji u properties od C++ projekta i lociraj Configuration Properties/Debugger. Promeni Command iz
$(TargetPath) u
$(TargetDir)\userhook.exe a u command arguments stavi ono sto bi stavio iza userhook komande. Debugger Type prebaci u "Managed Only" ili "Mixed". Pokreni projekat u debug modu (F5). VS ce pozvati userhook i zakaciti se za njega, on ce ucatati c++ dll koji ce ucitati maanged DLL koji ce puknuti.
Ako je to komanda koju ukucavas u konzolu neke aplikacije (te delphi) onda 3b:
3b. (ako nije komandna linija) Iz debug menija izaberi Attach to process i lociraj aplikaciju. Promeni attach to: sa "automatic" na "Managed" (i eventualno native ako hoces da single-stepujes kroz C++ deo). Attach. i posle iz aplikacije pokreni user hook da izazoves gresku
Ako je sve ok trebalo bi da ti breakuje u VSu kad nastupi managed exception.
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog
naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji
je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan,
sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv - Z.Đinđić