Laden...

dll import - visual c#

Erstellt von klaus1 vor 18 Jahren Letzter Beitrag vor 18 Jahren 7.101 Views
klaus1 Themenstarter:in
180 Beiträge seit 2005
vor 18 Jahren
dll import - visual c#

Hallo!

besitze folgenden Visual Basic Code, um eine dll einzubinden:

Option Explicit
Private Declare Function OpenDevice Lib "k8055d.dll" (ByVal CardAddress As Long) As Long
Private Declare Sub CloseDevice Lib "k8055d.dll" ()
Priave Declare Function ReadAnalogChannel Lib "k8055d.dll" (ByVal Channel As Long) As Long

usw.

Möchte nun das ganze in meinem c# projekt verwirklichen, ist das möglich?
Hätte so begonnen:

In der AssemblyInfo.cs nach:


[assembly: AssemblyTitle("")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("")]
[assembly: AssemblyCopyright("")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]		


[DllImport("kb8055d.dll")]
private static extern long OpenDevice(long CardAddress);


usw.. geht das? bekomme folgende Fehlermeldung:
Es wird Klasse, Delegat, Enumeration, Schnittstelle oder Struktur erwartet

könnte ich die Methoden dann einfach in meiner form1.cs verwenden?

Bitte um Hilfe! Danke!
LG, Klaus

4.221 Beiträge seit 2005
vor 18 Jahren

Hast Du den DllImport in der Datei AssemblyInfo.cs gemacht ? Wenn ja dann ist das der Fehler. (verschieben in eine normale Klasse)

Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...

klaus1 Themenstarter:in
180 Beiträge seit 2005
vor 18 Jahren

danke für den Tipp! Bin neu auf dem Gebiet!

hab jetzt folgendes ergänzt:


[DllImport("K8055D.dll")]
		private static extern long OpenDevice(long CardAddress);
		private static extern void CloseDevice();


da in er Visual Basic Anweisung folgende Zeile steht:
Private Declare Sub CloseDevice Lib "k8055d.dll" ()

Fehlermeldung:

Eine nicht behandelte Ausnahme des Typs 'System.TypeLoadException' ist in Unbekanntes Modul. aufgetreten.

Zusätzliche Informationen: Typ 'k8055_self_dll.Form1' der Assembly 'k8055_self_dll, Version=1.0.2045.34964, Culture=neutral, PublicKeyToken=null' konnte nicht geladen werden, da die Methode 'CloseDevice' keine RVA hat.

Merkwürdig ist auch, dass die Methode OpenDevice, bei Übergabe der HardwareAdresse, die Adresse der Messkarte zurückliefert. leider macht sie das auch bei nicht angesteckter Karte.. ist das ein Grund zur beunruhigung?

4.221 Beiträge seit 2005
vor 18 Jahren

DllImport muss immer auf allen Methoden stehen welche importiert werden sollen.

Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...

4.221 Beiträge seit 2005
vor 18 Jahren

Original von klaus1

Merkwürdig ist auch, dass die Methode OpenDevice, bei Übergabe der HardwareAdresse, die Adresse der Messkarte zurückliefert. leider macht sie das auch bei nicht angesteckter Karte.. ist das ein Grund zur beunruhigung?

long in VB 6 = int in C# (Int32)

Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...

klaus1 Themenstarter:in
180 Beiträge seit 2005
vor 18 Jahren

Besten Dank!

Funktioniert nun die Ansteuerung!! freu

Y
102 Beiträge seit 2005
vor 18 Jahren

hallo!

Ich hoffe das ihr mir helfen könnt! Mein Problem ist, dass ich jetzt ebenfalls so ein Board habe und ein Programm in C# dazu schreiben möchte. Habe so etwas noch nie gemacht.
Habe nun folgendes unter die Main-Routine geschrieben:

[DllImport("\\...\\K8055D.dll",EntryPoint="OpenDevice",
		CharSet=CharSet.Auto)]
		public static extern long OpenDevice(long CardAddress);
		public static extern long CloseDevice();

Wenn ich nun versuche das Programm auszuführen bekomme ich eine Meldung vom JIT:" An exception 'System.TypeLoadException' has occurend in Test.exe".
Was kann ich jetzt machen.
Bitte nun um Hilfe.

4.221 Beiträge seit 2005
vor 18 Jahren

Original von Yeats
hallo!

Ich hoffe das ihr mir helfen könnt! Mein Problem ist, dass ich jetzt ebenfalls so ein Board habe und ein Programm in C# dazu schreiben möchte. Habe so etwas noch nie gemacht.
Habe nun folgendes unter die Main-Routine geschrieben:

[DllImport("\\...\\K8055D.dll",EntryPoint="OpenDevice",  
  	CharSet=CharSet.Auto)]  
  	public static extern long OpenDevice(long CardAddress);  
  	public static extern long CloseDevice();  

Wenn ich nun versuche das Programm auszuführen bekomme ich eine Meldung vom JIT:" An exception 'System.TypeLoadException' has occurend in Test.exe".
Was kann ich jetzt machen.
Bitte nun um Hilfe.

wieso long ?.... mach mal int

Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...

Y
102 Beiträge seit 2005
vor 18 Jahren

Danke, bin dann selber daraufgekommen.
Wünsche noch fehlerfreies Programmieren

klaus1 Themenstarter:in
180 Beiträge seit 2005
vor 18 Jahren

Sollte es sich auch zufällig um das Vellemann Interface Board handeln (K8055), dann kann ich dir meine Homepage unter HARDWARE empfehlen:

http://www.k8055-velleman.at.tt

habe hier den selbst geschriebenen Treiber stehen!
Lg, Klaus