Unmanaged DLL Access Violation?

engelmarkus

Erfahrenes Mitglied
Guten Abend zusammen!
Ich habe hier eine kleine DLL in Assembler geschrieben:
Code:
[BITS 32]

GLOBAL _CPUID
EXPORT _CPUID

section .code
  _CPUID:
    mov eax, 1
    cpuid
  ret

Dieses Stückchen Code kompiliere und linke ich folgendermaßen zu einer DLL:
nasm -F null -l %1.lst -f win32 -Ox %1.asm
link %1.obj /DLL /DEBUG /MANIFEST /NODEFAULTLIB /NOENTRY
Dazu benutze ich den Microsoft Incremental Linker.
Jetzt kann ich diese DLL in C so benutzen:
C:
extern "C" int CPUID();
...
int i = CPUID();

Nur habe ich ein Problem, wenn ich das jetzt auch in VB.Net machen möchte:
Code:
     <DllImport("cpuid.dll")> _
     Function CPUID() As Int32
     End Function
So gibt es beim Aufruf der Funktion eine Access Violation. Ist in diesem VB.Net-Code ein Fehler?
 
Hi.

Probier's mal so:
Code:
<DllImport("cpuid.dll", CallingConvention := CallingConvention.Cdecl)> _
     Function CPUID() As Int32
     End Function
Gruß
 
Jetzt ist es interessanterweise so, dass sich verschiedene Sachen abwechseln. Trotz Breakpoint beendet sich das Programm einfach, ohne dass eine Meldung über eine Exception im Direktfenster kommt. Ein anderes mal gibt es eine StackOverFlowException in "Unbekanntes Modul". Ganz am Anfang war auch einmal die AccessViolation :confused: .
Soll ich die Dateien mal anhängen?
 
So, bitteschön :) .
Ich hoffe, das hängt nicht damit zusammen, dass ich ein 64-bit-Windows verwende. Andererseits hab ich alles so eingestellt, dass es 32-bit Code erzeugt, und die C-Version geht ja.
 

Anhänge

  • ASM_DLL_Test.zip
    646,6 KB · Aufrufe: 20
Zuletzt bearbeitet:
Zurück