Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 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++:
#include "stdafx.h"

typedef int (__stdcall *VBFunction)(int p1, int p2);

VBFunction SavedAddress=0;

BOOL APIENTRY DllMain( HANDLE hModule,
                       ;DWORD  ul_reason_for_call,
                       LPVOID lpReserved
)
{
    return TRUE;
}


void __stdcall SetAddressAndCall(void* addr)
{
if(addr)
{
SavedAddress=(VBFunction)addr;
SavedAddress(10,20);  //вызов
}
}



В модуле VB:
Option Explicit

Public Function ToBeCalled(ByVal p1 As Long, ByVal p2 As Long) As Long
  MsgBox CStr(p1) & " " & CStr(p2)
End Function



В форме VB:
Option Explicit

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-сайт: basicproduction.nm.ru
 Профиль | | #34
Добавлено: 24.03.05 10:40
Угу, это не его дело :)

Ответить

Номер ответа: 35
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #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)

По моему в таком коде возни больше:

typedef int (__stdcall *VBFunction)(int p1, int p2);
{
SavedAddress=(VBFunction)addr;
SavedAddress(p1,p2);
}


чем в таком:

__asm{
    push p2
    push p1
    call addr
}


хотя эти два куска выполняют абсолютно одинаковые действия: положить два параметра в стек и вызвать процедуру по адресу.

Ответить

Номер ответа: 37
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #37
Добавлено: 24.03.05 11:43
Ага, на первый кусок смотреть страшно. :)

Ответить

Номер ответа: 38
Автор ответа:
 DaSharm



ICQ: 780477 

Вопросов: 72
Ответов: 1297
 Web-сайт: dasharm.com
 Профиль | | #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
Вот вы inline делаете и машинопись вставляете, а откуда вы узнаёте что это тот самый код? Телепатия?


Ну ты бы ещё "клинопись" сказал бы :)))
Телепатия ни при чём. Посидишь некоторое время в отладчике или дизассемблере, тоже будешь код узнавать "в лицо".

Ой-ой-ой-ой вот как раз заменить там и нету. Вместо столь полезной функ там есть возвращалка длины


Кроме возвращалки длины есть и определялка первого вхождения подстроки в строку. И определялка вхождения подстроки сзади (от конца).
И ещё лепилка строк, чтобы слепить две в одну.
Этого достаточно, чтобы нарисовать свой 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...

Ответить

Страница: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам