2017-12-24 4 views
-1

Ich habe über Google recherchiert und http://www.cs.virginia.edu/~evans/cs216/guides/vsasm.html Referenzieren, aber ich frage mich, ob jemand irgendwelche Ideen hat, wie man diesen nicht gefundenen Fehler beheben kann. Das Klare();' in extern hat "C" einen nicht gefundenen Fehler. Ich hoffe, dass diese Frage spezifisch genug ist, dass sie gelöst werden kann. Jeder Rat würde sehr geschätzt werden.Raffinierte Anfrage über einen nicht gefundenen Fehler in Visual Studio 2017

Dies ist die .cpp-Datei.

extern "C" { 
    void clear(); 
} 

int main() { 
    clear(); 
    return 1; 
} 

Dies ist die ASM-Datei.

.586    ;Target processor. Use instructions for Pentium class machines 
.MODEL FLAT, C ;Use the flat memory model. Use C calling conventions 
.STACK   ;Define a stack segment of 1KB (Not required for this example) 
.DATA    ;Create a near data segment. Local variables are declared after 
       ;this directive (Not required for this example) 
.CODE    ;Indicates the start of a code segment. 

clear PROC 
    xor eax, eax 
    xor ebx, ebx 
ret 
clear ENDP 
END 

In Visual Studio habe ich die Mash in Build Customization Files aktiviert. Ich habe auch aus dem Build ausgeschlossen auf "Nein" gesetzt.

Die Befehlszeile Eigenschaft in Schritt Custom Build sieht wie folgt aus:

ml /Cx /coff clear.asm /link /SUBSYSTEM:console /out:go /entry:clear 

Als ich Lösung/Projekt erstellen/jede Datei einzeln gelingt es, aber ich kann nicht herausfinden, warum die ‚clear(); " im folgenden -> hat ein grünes Schnörkel einen nicht gefundenen Fehler angezeigt.

extern "C" { 
    void clear(); 
} 
extern "C" { 
    void clear(); 
} 
+1

Ist das ein Linker Fehler oder nur Intellisense verwirrt? – Quentin

+1

Bitte geben Sie den genauen Fehler an. –

+0

@RichardCritten 'Funktionsdefinition für' clear 'nicht gefunden.' –

Antwort

-1

Ändern Sie den Namen in der ASM-Datei in "_clear" statt nur "clear".

+0

Was ist der Grund dafür? – VTT

+0

Sie benutzt '.MODEL FLAT, C'. Das 'C' ändert die Standardkonvention in CDECL für jede 'PROC'-Anweisung, die erscheint. Mit der CDECL-Konvention wird MASM das '_' für Sie voranstellen. Soweit ich weiß, ist ihr Problem nicht das Kompilieren/Verknüpfen des Codes (das funktioniert). Das Problem ist, dass VS "Clear", wie in einem externen Assembly-Modul definiert, nicht erkennt. Ich glaube nicht, dass VS (von selbst) unterstützt, was dieses OP versucht zu tun - die grüne Schlangenlinie verschwinden zu lassen –