На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела Visual Basic: Общие вопросы
Здесь обсуждаются вопросы по языку Visual Basic 1-6 (а так же по схожим языкам, как, например, PowerBASIC).
Вопросы по Visual Basic .NET (это который входит в состав Visual Studio 2002/2003/2005/2008+, для тех, кто не в курсе) обсуждаются в разделе .NET.

Обратите внимание:
1. Прежде чем начать новую тему или отправить сообщение, убедитесь, что Вы не нарушаете правил форума!
2. Обязательно воспользуйтесь поиском. Возможно, Ваш вопрос уже обсуждали. Полезные ссылки приведены ниже.
3. Темы с просьбой выполнить какую-либо работу за автора в этом разделе не обсуждаются. Студенты, вам сюда: ПОМОЩЬ СТУДЕНТАМ!
4. Используйте теги [ code=vba ] ...текст программы... [ /code ] для выделения текста программы подсветкой.
5. Помните, здесь телепатов нет. Формулируйте свой вопрос максимально грамотно и чётко: Как правильно задавать вопросы
6. Запрещено отвечать в темы месячной (и более) давности, без веских на то причин.

Полезные ссылки:
user posted image FAQ Сайта user posted image FAQ Раздела user posted image Кладовка user posted image Наши Исходники user posted image API-Guide user posted image Поиск по Разделу user posted image MSDN Library Online user posted image Google

Ваше мнение о модераторах: user posted image SCINER, user posted image B.V.
Модераторы: SCINER, B.V.
Страницы: (3) 1 [2] 3  все  ( Перейти к последнему сообщению )  
> Ассемблеровские вставки
    Цитата
    SCINER, Я чето непонял... там асм в bat файле???

    ну, и я тож ни че не понял
      Цитата
      А пример приведеный выше разве не является примером использования dll с асмом?

      я просто не смог вырезать вункцию из скомпелированной dll'ки и вставить ее в .exe!


      Я вообще-то и не понял даже где там асм... :no:
      ExpandedWrap disabled
        #_CPP [DLL: CPP_DLL]
         #include <windows.h>
         #include <string.h>
         #include <ole2.h>
         BYTE _stdcall TestByte( BYTE a, LPBYTE b )
         {
             *b = a + a;
             return( *b + a );
         }
        #End _CPP

      Ето что-ли?
      Функция выглядела бы:
      ExpandedWrap disabled
        Int _stdcall TestByte( BYTE a, LPBYTE b )
         {
        int c;
        __asm{
           mov al,a
           mov bl,b
           add al,bl
           moc c,eax
           }
        return (c);
         }
        #End _CPP


      :D Понапридумывают...
      Сообщение отредактировано: Black Star -
        але! ты читать у меешь??
        Цитата

        Вот что касается асма, то мое маленькое достижение поможет писать на асме в среде Visual Basic т.к. всем известно что в С++ встроен асм.)


        Где там SCINER? Ты хотел компилить только асемовские вставки?асем то компилить мона - это без вопросов, вот только как это пристрастить к VB? смутно представляю
        раскажи по подробней о своей идеии
        Сообщение отредактировано: maxim84_ -
          Цитата
          раскажи по подробней о своей идеии

          у него может и идей нету
            Цитата Andrey_Kun @ 16.11.04, 15:24
            SCINER, :blink: :blink: Я чето непонял... там асм в bat файле???

            Это ниже чем асм.
            Это самое низкоуровневое программирование.
            Ниже некуда.
            Это машинные коды!

            Добавлено
            Цитата miksayer @ 16.11.04, 18:36
            Цитата
            раскажи по подробней о своей идеии

            у него может и идей нету

            Идея есть.

            1. Линкер. Ему указывают из каких файлов собрать экзешку. Это можно увидеть, если перехватить его командную строку. Она выглядит примерно так:

            ExpandedWrap disabled
              \link.exe "C:\My Downloads\Hide_From\icanhide\icanhide.OBJ"
              /ENTRY:__vbaS /OUT:"C:\My Downloads\Hide_From\icanhide\icanhide.exe" /BASE:0x400000
              /SUBSYSTEM:WINDOWS,4.0 /VERSION:1.0   /INCREMENTAL:NO /OPT:REF
              /MERGE:.rdata=.text /IGNORE:4078  /OPT:NOWIN98
              "C:\Program Files\SCINSpy\SSButton.OBJ" "C:\Program Files\SCINSpy\SSTabStrip.OBJ"
              "C:\Program Files\SCINSpy\modPrinter.OBJ" "C:\Program Files\SCINSpy\SSListViewReport.OBJ"
              "C:\Program Files\SCINSpy\modLogBase.OBJ" "C:\Program Files\SCINSpy\SCINSpy.OBJ"
              "C:\Program Files\Microsoft Visual Studio\VB98\VBAEXE6.LIB" /ENTRY:__vbaS /OUT:"C:\Program Files\SCINSpy\SCINSpy.exe" /BASE:0x400000 /SUBSYSTEM:WINDOWS,4.0
              /VERSION:6.1 /INCREMENTAL:NO /OPT:REF /MERGE:.rdata=.text /IGNORE:4078  /OPT:NOWIN98


            Т.е. туча файлов с расширением *.OBJ

            А что будет если один из них подменить своим. Но скомпиленным PB ??
            Если конечно PB создает OBJ файлы.
            Сообщение отредактировано: SCINER -
              я тут начал разбор полетов с компилятором c2.exe
              вот, что пока из этого выходит:

              Сперва ОБЯЗАТЕЛЬНО прочтите Readme!
              Прикреплённый файлПрикреплённый файлvb2asm.zip (1.51 Кбайт, скачиваний: 163)
                Цитата
                BYTE _stdcall TestByte( BYTE a, LPBYTE b )

                maxim84_, у тебя эта ф-я экспортировалась ?? не верю...
                вот так должно экспортироваться
                ExpandedWrap disabled
                  extern "C" __dllspec(dllexport) __stdcall TestByte( BYTE a, LPBYTE b )

                И действительно, если кому то нужны вставки на асме пусть пишет длл на С, не очень удобно конечно, не не менее,
                чем писать вставки на асме...

                А вообще, чего вам сдался этот асм, это ж отстой, только для понта разве что... реального применения практически нет... рельно полезных асм вставок единицы, и все они уже написанны до нас...
                  Цитата
                  рельно полезных асм вставок единицы, и все они уже написанны до нас...


                  Вот если бы они ещё волялись всюду :)
                    Цитата
                    А вообще, чего вам сдался этот асм, это ж отстой, только для понта разве что... реального применения практически нет... рельно полезных асм вставок единицы, и все они уже написанны до нас...

                    а, например, узнать тактовую частоту процессора и вообще можно много чего узнать
                      Цитата
                      а, например, узнать тактовую частоту процессора и вообще можно много чего узнать

                      Ага, много всего, только это по большому счёту бесполезная информация...

                      Асмовые вставки, насколько я знаю в основном используют в графике...
                      Цитата
                      Вот если бы они ещё волялись всюду

                      ExpandedWrap disabled
                        __inline void MyFtoL(int *i, float f )
                        {
                          __asm fld f;
                          __asm mov edx, I
                          __asm fistp [edx];
                        }


                      ExpandedWrap disabled
                        /*********************************************************************
                        ulSqrt.cpp
                         
                        Copyright (C) 1999, 2000 NVIDIA Corporation
                        This file is provided without support, instruction, or implied
                        warranty of any kind.  NVIDIA makes no guarantee of its fitness
                        for a particular purpose and is not liable under any circumstances
                        for any damages or loss whatsoever arising from the use or inability
                        to use this file or items derived from it.
                         
                        Comments:
                        *********************************************************************/
                        #include <stdio.h>
                        #include <math.h>
                        #include <windows.h>
                         
                        static float _0_47 = 0.47f;
                        static float _1_47 = 1.47f;
                         
                        float __fastcall ulrsqrt(float x)
                        {
                          DWORD y;
                          float r;
                          _asm
                          {
                            mov     eax, 07F000000h+03F800000h // (ONE_AS_INTEGER<<1) + ONE_AS_INTEGER
                            sub     eax, x
                            sar     eax, 1
                         
                            mov     y, eax                      // y
                            fld     _0_47                       // 0.47
                            fmul    DWORD PTR x                 // x*0.47
                         
                            fld     DWORD PTR y
                            fld     st(0)                       // y y x*0.47
                            fmul    st(0), st(1)                // y*y y x*0.47
                         
                            fld     _1_47                       // 1.47 y*y y x*0.47
                            fxch    st(3)                       // x*0.47 y*y y 1.47
                            fmulp   st(1), st(0)                // x*0.47*y*y y 1.47
                            fsubp   st(2), st(0)                // y 1.47-x*0.47*y*y
                            fmulp   st(1), st(0)                // result
                            fstp    y
                            and     y, 07FFFFFFFh
                            
                          }
                          r = *(float *)&y;
                          // optional
                          r = (3.0f - x * (r * r)) * r * 0.5f; // remove for low accuracy
                          return r;
                        }
                         
                        /*
                            sqrt(x) = x / sqrt(x)
                        */
                         
                        float __fastcall ulsqrt(float x)
                        {
                          return x * ulrsqrt(x);
                        }


                      ExpandedWrap disabled
                            inline unsigned __int64 GetCycleCount(void)
                            {
                                _asm _emit 0x0F
                                _asm _emit 0x31
                            }

                      аналог GetTickCount, но гораздо точнее
                      ещё где то было :) вообще если хорошенько поискать...
                        Цитата
                        Асмовые вставки, насколько я знаю в основном используют в графике...


                        Ну... я бы несказал, что в графике... Чаще всего в вирях :ph34r:
                          SmK, да экспортировалось!! и все работет могу dll'ку выложить.
                          И не надо обсерать асем, асем это - "основа". я вот что хочу сказть по поводу асма, если не умеешь на нем писать как нужно, то и будет отстоем:) да листинг сдоровенный.

                          я считаю лючше интегрировать уж стразу C++, тогда больше толку будет. но это мое мнение.:)

                          Добавлено
                          слушай Sciner, а зачем
                          Цитата

                          цитата из Readme!!!.txt
                          ASM-код всех модулей, классов, контролов и форм проекта
                          Сообщение отредактировано: maxim84_ -
                            незнаю :huh:
                              Цитата maxim84_ @ 17.11.04, 19:38
                              SmK, да экспортировалось!! и все работет могу dll'ку выложить.
                              И не надо обсерать асем, асем это - "основа". я вот что хочу сказть по поводу асма, если не умеешь на нем писать как нужно, то и будет отстоем:) да листинг сдоровенный.

                              я считаю лючше интегрировать уж стразу C++, тогда больше толку будет. но это мое мнение.:)

                              Добавлено
                              слушай Sciner, а зачем
                              Цитата

                              цитата из Readme!!!.txt
                              ASM-код всех модулей, классов, контролов и форм проекта

                              например, чтобы скомпилировать код на асме. Прога тогда msvbvm60.dll е будет требовать, наверное...
                                miksayer, не много не понел
                                Ну да, будет, конечно поскольку вставки в VB проекте!! или ты про что то другое?

                                SCINER, а зачем тогда парился? просто так? ты что то про PB говорил, не почается?мне кажеться просто стоит скомпелировать асемовским компилем и вырезать нужную вставку и вставить там где эта вставка на VB. Другой вопрос как это сделать? можно выризать диапазон адресов. я тык пытался, видно не фига в адрес не попал. нужно работать по принцепу вирей. где они свой код вписывают в нужные адриса.
                                Сообщение отредактировано: maxim84_ -
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (3) 1 [2] 3  все


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0810 ]   [ 15 queries used ]   [ Generated: 17.05.24, 12:12 GMT ]