Страница: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
Вопрос: C++ vs Basic
Добавлено: 21.03.05 18:24
Автор вопроса: Дмитрий Щапов
Ответы
Всего ответов: 127
Номер ответа: 31
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #31
Добавлено: 23.03.05 23:51
в string.h такого вроде нет. Напиши свою.
Номер ответа: 32
Автор ответа:
GSerg
Вопросов: 0
Ответов: 1876
Профиль | | #32
Добавлено: 24.03.05 05:23
Асм - это, конечно, хорошо, когда сам язык не предоставляет нужных возможностей. Но если язык возможности предоставляет, нужно воспользоваться ими
В C++:
typedef int (__stdcall *VBFunction)(int p1, int p2);
VBFunction SavedAddress=0;
BOOL APIENTRY DllMain( HANDLE hModule,
 WORD ul_reason_for_call,
LPVOID lpReserved
)
{
return TRUE;
}
void __stdcall SetAddressAndCall(void* addr)
{
if(addr)
{
SavedAddress=(VBFunction)addr;
SavedAddress(10,20); //вызов
}
}
В модуле VB:
Public Function ToBeCalled(ByVal p1 As Long, ByVal p2 As Long) As Long
MsgBox CStr(p1) & " " & CStr(p2)
End Function
В форме VB:
Private Declare Sub SetAddressAndCall Lib "C:\Program Files\Microsoft Visual Studio\MyProjects\fooTestCallVBFunction\Release\fooTestCallVBFunction.dll" (ByVal addr As Long)
Private Sub Command1_Click()
SetAddressAndCall AddressOf ToBeCalled
End Sub
Номер ответа: 33
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #33
Добавлено: 24.03.05 09:38
Асм - это хорошо всегда, а не только когда язык не предоставляет возможностей. А что нужно или не нужно, решит автор. Это не наше дело.
Номер ответа: 34
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #34
Добавлено: 24.03.05 10:40
Угу, это не его дело
Номер ответа: 35
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #35
Добавлено: 24.03.05 10:47
Действительно подход к программированию неправильный.
Чем больше кусков на АСМ-е, тем дороже ценность проги. Но вот только кто будет с ним возиться?
Номер ответа: 36
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #36
Добавлено: 24.03.05 11:35
Разве с асмом надо возиться? Тот кусок, что я привел, намеренно раздут, чтобы понятно было как всё происходит. mov eax,p1; mov eax,[eax]; push eax - Эти три инструкции заменяются одной: push p1.(передавать byval)
По моему в таком коде возни больше:
{
SavedAddress=(VBFunction)addr;
SavedAddress(p1,p2);
}
чем в таком:
push p2
push p1
call addr
}
хотя эти два куска выполняют абсолютно одинаковые действия: положить два параметра в стек и вызвать процедуру по адресу.
Номер ответа: 37
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #37
Добавлено: 24.03.05 11:43
Ага, на первый кусок смотреть страшно.
Номер ответа: 38
Автор ответа:
DaSharm
ICQ: 780477
Вопросов: 72
Ответов: 1297
Web-сайт:
Профиль | | #38
Добавлено: 24.03.05 11:54
да, Ассемблерные вставки иногда лучше и проще чем вызывать АПИ...
Номер ответа: 39
Автор ответа:
Дмитрий Щапов
Вопросов: 71
Ответов: 321
Профиль | | #39
Добавлено: 25.03.05 00:34
[[А что касается стандартных библиотек, то там есть очень многое, в том числе и это.]]
Там есть очень-очень многое, только не то что надо.
Номер ответа: 40
Автор ответа:
Дмитрий Щапов
Вопросов: 71
Ответов: 321
Профиль | | #40
Добавлено: 25.03.05 00:40
Вот вы inline делаете и машинопись вставляете, а откуда вы узнаёте что это тот самый код? Телепатия?
А что есть втом-же string.h
сравнить стр | И всё это в десяти экземплярах
заменить стр |
копировать стр |
найти стр |
Номер ответа: 41
Автор ответа:
Дмитрий Щапов
Вопросов: 71
Ответов: 321
Профиль | | #41
Добавлено: 25.03.05 00:43
Ой-ой-ой-ой вот как раз заменить там и нету. Вместо столь полезной функ там есть возвращалка длины.
Номер ответа: 42
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #42
Добавлено: 25.03.05 01:45
Ну ты бы ещё "клинопись" сказал бы ))
Телепатия ни при чём. Посидишь некоторое время в отладчике или дизассемблере, тоже будешь код узнавать "в лицо".
Кроме возвращалки длины есть и определялка первого вхождения подстроки в строку. И определялка вхождения подстроки сзади (от конца).
И ещё лепилка строк, чтобы слепить две в одну.
Этого достаточно, чтобы нарисовать свой Replace.
Ищешь в строке вхождение подстроки, которую надо заменить. Если получил ноль - значит нет такого куска в строке. Можно умывать руки.
Если нашёл - делаешь новую строку. Копируешь туда часть старой до вхождения. И цепляешь к этой новой строке кусок, на который надо заменить искомую подстроку. От найденной позиции дальше продолжаешь искать вхождения искомой подстроки, и повторяешь действия с созданием новой строки и прицеплением к ней подставляемого куска. И так, пока твоя исходная строка не закончится. После этого взял все свои новые строки, сколько их есть, и слепил слеплялкой в одну строку. И всё.
Номер ответа: 43
Автор ответа:
Дмитрий Щапов
Вопросов: 71
Ответов: 321
Профиль | | #43
Добавлено: 25.03.05 20:07
А где там функция получения символа с указанным кодом и строки можно объединять только всякими strcat , а просто"+" нельзя чтоль?
Номер ответа: 44
Автор ответа:
Дмитрий Щапов
Вопросов: 71
Ответов: 321
Профиль | | #44
Добавлено: 25.03.05 20:38
А что не понравилось "машинопись". по моему ничего словечко.
В replace я встрял мне надо скопировать n символов не от начала строки, а с какой-то позичии. strstr возвращает-то строку начинающуюся с FindText.
Я слишком долго сидел в ВБ и безнадёжно устарел. Да тут ещё CD-ROM разорвал Painkiller.. Козёл.
Мой моральный дух на нуле...
Номер ответа: 45
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #45
Добавлено: 25.03.05 22:17
Символ + складывает числа. Это в VB строки есть. В си строк нет. Есть адреса строк. Адреса складывать - новую строку не получишь
Ну вот, раскис
Давай будем делать Replace...