Avatar billede tgv Nybegynder
05. juli 2004 - 00:22 Der er 4 kommentarer

C++ og inline assembler (_asm)

Hejsa

Jeg prøver på at lave en messagebox i c++/assembler kode. Programmet crasher desværre hver gang jeg forsøger at køre det.
Min kode ser pt. sådan ud:

#include "stdafx.h"

int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
        LPCTSTR text = "hello";
        UINT nmb = 0;

        _asm
        {
            push nmb
            push text
            push text
            push nmb
            call MessageBoxA

        }
    return 0;
}

Jeg ved dog slet ikke om det er det rigtige jeg har gang i. Hvis i kunne poste et eksempel ville det hjælpe mig meget

Mvh. Morten
Avatar billede tgv Nybegynder
05. juli 2004 - 00:23 #1
Forresten: Jeg bruger MSVC 6.0 / Windows XP
Avatar billede bertelbrander Novice
05. juli 2004 - 01:04 #2
Det ser ud til at virke hvis man skriver:

call DWORD PTR MessageBoxA

og ikke blot:
call MessageBoxA

Man kan lære en del om assembler ved at skrive koden i C++ og så oversætte til asm. Det kan gøres fra kommando linien, f.ex:
cl /FA /c vcasm.cpp
Avatar billede soreno Praktikant
05. juli 2004 - 08:37 #3
Kræver Winapi funktioner ikke at man selv rydder op på stakken efter funktionskald (pop) ?
Avatar billede soreno Praktikant
05. juli 2004 - 08:41 #4
Nevermind, det står her:
http://www.codeproject.com/cpp/calling_conventions_demystified.asp

Det er ved cdecl man selv skal rydde op. Ved stdcall skal man ikke.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester