Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » Borland C++ Builder » Assemblerfunktionen in C++ Builder 3.0

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
12.08.2005, 14:14 Uhr
~EinCppProgrammierer
Gast


Hallo,

ich möchte in einem C++ Builder 3.0 Projekt eine Asm-Datei einbinden, und deren Unterprogramme aus meinem C++ Programm aus aufrufen.

Ich habe bis jetzt nur eine einzige Kombinationen der Aufrufkonventionen gefunden gefunden, bei der die Assemblerfunkion vom Linker überhaupt gefunden wird, und die ist seltsamerweise wenn ich in der .asm Datei als Speichermodell

.model flat, STDCALL

benutze, aber die Prozedur in der .asm Datei mit

PROC C, EXPORT, Parameter1WORD

definiere, also das zuvor festgelegte stdcall explizit umgehe, oder täusche ich mich da???

Ändere ich in der .cpp-Datei die Aufrufkonventionen am Prototypen so, dass er keinen nach "Test" anstatt "_Test" sucht, dann findet er diesen auf keinen Fall, egel welche mir erdenklichen Aufrufkonventionen ich in der .asm Datei einstelle (natürlich nach vorherigem umbenennen von _Test in Test in der .asm-Datei)

Ich wäre ja zufrieden mit dieser meiner Ansicht nach seltsamen Kombination, aber sobald ich den (im unten aufgelisteten Quellcode auskommentierten) zweiten Parameter übergebe liest er mir diese falsch.

die quellcodes meines Projektes sehen so aus:


Die C++ Datei:

C++:
#pragma hdrstop
#include <condefs.h>
#include <iostream.h>

//---------------------------------------------------------------------------
USEASM("Unit1.asm");
//---------------------------------------------------------------------------
extern "C" int Test (unsigned long*,/*unsigned long**/);   // bewirkt ein weiteres __cdecl überhaupt etwas

#pragma argsused
int main(int argc, char **argv)
{   unsigned long testvar = 654;
    cout << Test(&testvar/*,&testvar*/);
    return 0;
}



Die .ASM Datei:

Code:

.386
.model flat, STDCALL
.data
.code

_Test PROC C, EXPORT, Parameter1:DWORD;, Parameter2:DWORD
    mov eax, [Parameter1]
    inc eax
    ret
_Test ENDP

PUBLIC _Test
end




Falls irgend jemand mir helfen kann wäre ich sehr froh.

Vielen, vielen Dank schon mal im Voraus,

EinCppProgrammierer
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ Borland C++ Builder ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: