Ich benutze Visual Studio im Moment. Ich brauche eine Win32-Anwendung zu bauen und benötigen eine Prozedur aus einer C-Funktion zu nennen, aber ich bin immer ein Build-Fehler bekommen:Aufruf von MASM32-Prozedur von .c
Fehler 3 Fehler LNK1120: 1 nicht aufgelöste externe
ich alles auf eine einfache reduziert Hauptfunktion und einfache .ASM-Datei mit einer Prozedur und ich bekomme immer noch den gleichen Build (oder Link) Fehler. Ich bin ratlos.
Beide verwenden die cdecl-Konvention.
Der MASM32 Code (in seiner eigenen .asm-Datei):
.MODEL FLAT, C
.DATA
.CODE
PUBLIC memory_address
memory_address PROC
mov eax, DWORD PTR [esp]
ret
memory_address ENDP
END
Es versammelt in Ordnung. Die .c-Datei:
#include <stdlib.h>
#include <malloc.h>
#include <stdio.h>
extern int memory_address(int* ptr);
void main()
{
int *ptr = (int*)malloc(sizeof(int));
memory_address(ptr);
while (1) {}
return;
}
Keine Ahnung, warum das passiert. Ich benutze MASM gerne für 64-Bit-Anwendungen für ungefähr ein Jahr oder so ohne Probleme. Aber ich muss eine 32-Bit-Anwendung machen, ich habe kein Glück, den MASM32 proc memory_address() aufzurufen.
Ich beeile mich hinzuzufügen Ich weiß, wie dies in NASM für 32-Bit-Anwendungen zu tun, und ich weiß, wie es für 64-Bit-Anwendungen mit MASM zu tun. Dies ist streng genommen ein MASM32-Problem. Irgendwelche Vorschläge wären großartig - aber nur für MASM32. Vielen Dank.
Ich weiß, dass Sie die Antworten für MASM32 wollen, aber wie haben Sie tun dies in NASM? Könntest du das auch zeigen? Bearbeiten Sie einfach Ihre Frage, um den NASM-Code anzuzeigen, der funktioniert hat. –
Versuchen Sie, dem Namen des masm-Verfahrens einen führenden Unterstrich hinzuzufügen? – anatolyg
Erwähnt es auch den Namen, den es zu finden versucht, direkt vor dem Fehler, den du zitiert hast? – anatolyg