Assembler-Code in C# einfügen



  • Ist dir aufgefallen, dass du gar keine funktionen definiert hast?
    Du tust den assembler code einfach in die klasse reinschreiben.



  • Hmm ich kenn mich in Assembler nicht aus, aber Dir ist schon bewusst dass

    char
    

    ein UTF16 char und somit 2 Byte lang ist?
    Dafür gibt es Byte als Datentyp.



  • Entweder ich steh auf dem Schlauch, oder das sieht sowas von gar nicht nach C# aus, scheint wohl C++ zu sein...

    Edit:

    Ringostarr schrieb:

    da gibt mein Visual C++ 2005 folgende Fehlermeldungen raus.

    Da haben wirs 😃



  • Badestrand schrieb:

    Entweder ich steh auf dem Schlauch, oder das sieht sowas von gar nicht nach C# aus, scheint wohl C++ zu sein...

    Edit:

    Ringostarr schrieb:

    da gibt mein Visual C++ 2005 folgende Fehlermeldungen raus.

    Da haben wirs 😃

    Jo, dann lies mal die Überschrift.



  • @Ringostarr:
    Bitte definiere doch zunächst mal, mit welcher Sprache Du arbeitest.



  • SeboStone schrieb:

    Jo, dann lies mal die Überschrift.

    Lies doch selber die Überschrift 🙄

    Wenn es C++ sein soll, dann kompiliert deine Lösung bei mir, nur dass der Code natürlich in eine Funktion gehört und nicht in eine Klasse (wie Dennis123 schon meinte).



  • @Dennis123: Ja, tut mir leid, ist mir gar nicht aufgefallen, ich hatte den Code einfach so kopiert und mir nichts weiter dabei gedacht 😉

    @pub00515: Ähm, Das mit dem char ist auch nur aus dem Codebeispiel von http://www.codeproject.com/csharp/unmanage.asp (Program 7) übernommen.

    @Badestrand: Dass das C++ Code ist, weiß ich ja, ich will aber Assembler-Code ausführen und das geht meines wissens nach nicht in C#, deshalb der Umweg über C++ und dann mit der DLL-Datei verlinken.

    @LordJaxom: eigentlich arbeite ich mit der Sprache C#, aber wie oben schon beschrieben, der Umweg über C++.

    Ich hab mal noch ein bisschen rumgedoktort und bin jetzt bei folgendem C++ Code, der zu einer DLL-Datei kompiliert wird

    #pragma once
    
    using namespace System;
    
    namespace cpuid
    {
    	public class Class1
    	{
    		Class1();
    		char* cpuid2();
    	}
    
    	Class1();
    
    	char* Class1::cpuid2()
    	{
    		static char pszCPUType[13];
    		memset(pszCPUType, 0, 13);
    
    		_asm {
    			mov eax, 0
    			cpuid
    
    			// getting information from EBX
    			mov pszCPUType[0], bl
    			mov pszCPUType[1], bh
    .........
    .........
    		}
    
    		pszCPUType[12] = '0';
    
    		//return pszCPUType;
    	};
    }
    

    Die DLL binde ich dann in mein C# Programm ein, aber ich kann die Funktion nicht aufrufen. Was mache ich noch falsch?



  • Hast du angegeben, dass die Klasse/Funktion exportiert werden soll? Und eine Lib-Datei musst du glaubich auch erstellen.
    Du kannst die DLL auch mit nem Editor öffnen und gucken, ob du (mit Strg+F) den String "cpuid" findest (ohne "@+'äöamsd" oder so danach). Wenn nicht, ist die Funktion in den DLL nicht drin.



  • Kompiliere die DLL als COM-DLL (ATL Projekt) und setze in C# einen Verweis darauf, dann wird die lib Datei automatisch erstellt und Du kannst sehr einfach auf Deine Funktionen zugreifen.



  • Hat beides leider auch nicht funktioniert, aber er meckert jetzt, dass er den Einstiegspunkt in der DLL nicht finden kann.


Anmelden zum Antworten