![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| RWander |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 349 Регистрация: 4.5.2006 Где: Russia.Udm.Izhevs k Репутация: нет Всего: 6 |
Уважаемые знатоки языка C++, помогите пожалуйста переделать следующий код с языка Delphi на язык с++.
.... type TCoord = Record // Stores X, Y, Z coordinates X, Y, Z : glFLoat; end; ..... Function PosEx(const substr : AnsiString; const s : AnsiString; const start: Integer ) : Integer ; Type StrRec = record allocSiz: Longint; refCnt: Longint; length: Longint; end; Const skew = sizeof(StrRec); asm TEST EAX,EAX JE @@noWork TEST EDX,EDX JE @@stringEmpty TEST ECX,ECX //cs JE @@stringEmpty //cs PUSH EBX PUSH ESI PUSH EDI MOV ESI,EAX { Point ESI to } MOV EDI,EDX { Point EDI to } MOV EBX,ECX //cs save start MOV ECX,[EDI-skew].StrRec.length { ECX = } PUSH EDI { remember s position to calculate index } CMP EBX,ECX //cs JG @@fail //cs MOV EDX,[ESI-skew].StrRec.length { EDX = bstr) } DEC EDX { EDX = Length(substr) - } JS @@fail { < 0 ? return } MOV AL,[ESI] { AL = first char of } INC ESI { Point ESI to 2'nd char of substr } SUB ECX,EDX { #positions in s to look } { = Length(s) - Length(substr) + 1 } JLE @@fail DEC EBX //cs SUB ECX,EBX //cs JLE @@fail //cs ADD EDI,EBX //cs @@loop: REPNE SCASB JNE @@fail MOV EBX,ECX { save outer loop } PUSH ESI { save outer loop substr pointer } PUSH EDI { save outer loop s } MOV ECX,EDX REPE CMPSB POP EDI { restore outer loop s pointer } POP ESI { restore outer loop substr pointer } JE @@found MOV ECX,EBX { restore outer loop nter } JMP @@loop @@fail: POP EDX { get rid of saved s nter } XOR EAX,EAX JMP @@exit @@stringEmpty: XOR EAX,EAX JMP @@noWork @@found: POP EDX { restore pointer to first char of s } MOV EAX,EDI { EDI points of char after match } SUB EAX,EDX { the difference is the correct index } @@exit: POP EDI POP ESI POP EBX @@noWork: end; .... function GetCoords(S : String) : TCoord; var P, P2 : Integer; C : TCoord; begin S := Trim(Copy(S, 3, Length(S))); P := Pos(' ', S); P2 := PosEx(' ', S, P+1); S := StringReplace(S, '.', DecimalSeparator, [rfReplaceAll]); C.X :=StrToFloat(Copy(S, 1, P-1)); C.Y :=StrToFloat(Copy(S, P+1, P2-P-1)); C.Z :=StrToFloat(Copy(S, P2+1, Length(S))); Result :=C; end; -------------------- Microsoft Certified Technology Specialist - ASP.NET Applications |
|||
|
||||
| FelikZ |
|
|||
![]() Старый Маразматик ![]() ![]() Профиль Группа: Участник Сообщений: 380 Регистрация: 1.12.2006 Где: Vault 13 Репутация: нет Всего: 5 |
Чуть со стула не упал А вот код тут, в основном, ассемблерный так что, ИМХО, вам сюды -------------------- ![]() |
|||
|
||||
| RWander |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 349 Регистрация: 4.5.2006 Где: Russia.Udm.Izhevs k Репутация: нет Всего: 6 |
FelikZ, ха-ха-ха, как смешно.. я вкурсе, что Delphi - это IDE я просто ошибся.., некоторые, кстати, считают, что это язык, но я с ними тоже не согласе, но это не по теме. То, что написанно на ассемблере, переделывать не нужно, главное переписать функцию GetCoords на языке С++. Зараннее спасибо.
-------------------- Microsoft Certified Technology Specialist - ASP.NET Applications |
|||
|
||||
| FelikZ |
|
|||
![]() Старый Маразматик ![]() ![]() Профиль Группа: Участник Сообщений: 380 Регистрация: 1.12.2006 Где: Vault 13 Репутация: нет Всего: 5 |
ATL юзать можно?(а именно CString?)
-------------------- ![]() |
|||
|
||||
| apook |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 794 Регистрация: 12.7.2006 Репутация: 9 Всего: 23 |
Delphi object Pascal слегка модернизированный, я склонен думать что
это все-же язык -------------------- Мои руки из дуба, голова из свинца ну и пусть ... |
|||
|
||||
| FelikZ |
|
|||
![]() Старый Маразматик ![]() ![]() Профиль Группа: Участник Сообщений: 380 Регистрация: 1.12.2006 Где: Vault 13 Репутация: нет Всего: 5 |
Если можно ATL то тогда:
Писал от руки так что не факт что от работает, но сам смысл таков! -------------------- ![]() |
|||
|
||||
| nerezus |
|
|||
![]() Вселенский отказник ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3330 Регистрация: 15.6.2005 Репутация: 3 Всего: 43 |
Теперь можешь падать со стула. RWander, легко ведешься. |
|||
|
||||
| FelikZ |
|
|||
![]() Старый Маразматик ![]() ![]() Профиль Группа: Участник Сообщений: 380 Регистрация: 1.12.2006 Где: Vault 13 Репутация: нет Всего: 5 |
Это точно?! Меня всегда учили что это среда разработки и неболее... -------------------- ![]() |
|||
|
||||
| apook |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 794 Регистрация: 12.7.2006 Репутация: 9 Всего: 23 |
FelikZ Лучше код переведи а то я счас через неделю переведу
Опп уже, извиняй Это сообщение отредактировал(а) apook - 18.3.2007, 19:03 -------------------- Мои руки из дуба, голова из свинца ну и пусть ... |
|||
|
||||
| RWander |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 349 Регистрация: 4.5.2006 Где: Russia.Udm.Izhevs k Репутация: нет Всего: 6 |
А ATL можно использовать в C++ Builder? Если нет, то как можно написать иначе. -------------------- Microsoft Certified Technology Specialist - ASP.NET Applications |
|||
|
||||
| FelikZ |
|
|||
![]() Старый Маразматик ![]() ![]() Профиль Группа: Участник Сообщений: 380 Регистрация: 1.12.2006 Где: Vault 13 Репутация: нет Всего: 5 |
В билдере не работал. Может и есть... Но уверен, что там должен быть аналог CString'у в ATL. -------------------- ![]() |
|||
|
||||
| nerezus |
|
|||
![]() Вселенский отказник ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3330 Регистрация: 15.6.2005 Репутация: 3 Всего: 43 |
|
|||
|
||||
| console |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 307 Регистрация: 12.2.2007 Где: Belarus::Minsk Репутация: 1 Всего: 3 |
Цитата с WikiPedia
Это сообщение отредактировал(а) console - 18.3.2007, 23:03 |
|||
|
||||
| RWander |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 349 Регистрация: 4.5.2006 Где: Russia.Udm.Izhevs k Репутация: нет Всего: 6 |
console,
nerezus, лучше помогите перевести код -------------------- Microsoft Certified Technology Specialist - ASP.NET Applications |
|||
|
||||
| Greeen |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 710 Регистрация: 13.8.2006 Где: Петербург Репутация: 7 Всего: 18 |
У Билдера есть AnsiString.
-------------------- Подпись больше не нужна |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |