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.