myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Basistechnologien und allgemeine .NET-Klassen » Runtime Error 217 beim beenden...
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Runtime Error 217 beim beenden...

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Beni
myCSharp.de-Mitglied

Dabei seit: 07.04.2007
Beiträge: 4
Entwicklungsumgebung: VS2005


Beni ist offline

Runtime Error 217 beim beenden...

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo Zusammen,

habe folgendes Problem: Rufe über PInvoke Methoden einer Dll auf. Alles funktioniert wunderbar ausser, dass ich beim Beenden des Programmes immer ein "Runtime Error 217" erhalte. Sobald ich die DLL-Mehoden auskommentiere funktioniert alles ohne error.

Hier der vereinfachte Code:

C#-Code:
using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication3
{
    class Program
    {
        static void Main(string[] args)
        {

            USBBoard.OpenDevice(3);
            USBBoard.SetDigitalChannel(1);
            USBBoard.CloseDevice(3);
            Console.ReadLine();
        }
    }
}

C#-Code:
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
using System.IO;

namespace ConsoleApplication3
{
    class USBBoard
    {
        [DllImport("K8055D.dll")]
        public extern static Int32 OpenDevice(Int32 CardAddress);

        [DllImport("K8055D.dll")]
        public extern static void SetDigitalChannel(Int32 Channel);

        [DllImport("K8055D.dll")]
        public extern static void ClearAllDigital();

        [DllImport("K8055D.dll")]
        public extern static void CloseDevice(Int32 CardAdress);
    }
}

Muss ich die DLL beim Beenden irgendwie freigeben?

Vielen Dank

Beni
07.04.2007 08:59 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
marsgk marsgk ist männlich
myCSharp.de-Mitglied

Dabei seit: 04.06.2005
Beiträge: 1.439
Entwicklungsumgebung: Notepad++ + csc + nmake
Herkunft: Linz, Austria


marsgk ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Nein, eigentlich nicht. Erstell mal ein kleines C Programm mit der gleichen Funktionalität. Wenn hier auch ein Fehler auftritt, liegt es an deiner Dll. Wenn nicht, dann poste mal das Header-File mit den relevanten Funktionsdeklarationen.
07.04.2007 12:08 Beiträge des Benutzers | zu Buddylist hinzufügen
Beni
myCSharp.de-Mitglied

Dabei seit: 07.04.2007
Beiträge: 4
Entwicklungsumgebung: VS2005

Themenstarter Thema begonnen von Beni

Beni ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Nein, an der dll kanns nicht liegen, da in visual c++ oder so alles funktioniert.

Hier das h file:

Code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
typedef long (CALLBACK* LONG2LONG)(long);
typedef void (CALLBACK* VOID2VOID)(void);
typedef void (CALLBACK* LONGPLONGP2VOID)(long *, long *);
typedef void (CALLBACK* LONGLONG2VOID)(long, long);
typedef void (CALLBACK* LONG2VOID)(long);
typedef bool (CALLBACK* LONG2BOOL)(long);
typedef long (CALLBACK* VOID2LONG)(void);

class k8055d
{
public:
	k8055d(void);
	~k8055d(void);
	long  init(void);
	long  OpenDevice(long CardAddress);
	void  CloseDevice();
	long  ReadAnalogChannel(long Channel);
	void  ReadAllAnalog(long *Data1, long *Data2);
	void  OutputAnalogChannel(long Channel, long Data);
	void  OutputAllAnalog(long Data1, long Data2);
	void  ClearAnalogChannel(long Channel); 
	void  ClearAllAnalog();
	void  SetAnalogChannel(long Channel); 
	void  SetAllAnalog();
	void  WriteAllDigital(long Data);
	void  ClearDigitalChannel(long Channel);
	void  ClearAllDigital();
	void  SetDigitalChannel(long Channel);
	void  SetAllDigital();
	bool  ReadDigitalChannel(long Channel);
	long  ReadAllDigital();
	long  ReadCounter(long CounterNr);
	void  ResetCounter(long CounterNr);
	void  SetCounterDebounceTime(long CounterNr, long DebounceTime);
	
	bool  dout1;
	bool  dout2;
	bool  dout3;
	bool  dout4;
	bool  dout5;
	bool  dout6;
	bool  dout7;
	bool  dout8;

	bool  din1;
	bool  din2;
	bool  din3;
	bool  din4;
	bool  din5;

	long  da1;
	long  da2;
	long  ad1;
	long  ad2;

	long  ct1;
	long  ct2;
	long  dbct1;
	long  dbct2;

private:
	bool initialized;
	HINSTANCE hDLL;
	LONG2LONG		pOpenDevice;
	VOID2VOID		pCloseDevice;
	LONG2LONG		pReadAnalogChannel;
	LONGPLONGP2VOID pReadAllAnalog;
	LONGLONG2VOID	pOutputAnalogChannel;
	LONGLONG2VOID	pOutputAllAnalog;
	LONG2VOID		pClearAnalogChannel;
	VOID2VOID		pClearAllAnalog;
	LONG2VOID		pSetAnalogChannel;
	VOID2VOID		pSetAllAnalog;
	LONG2VOID		pWriteAllDigital;
	LONG2VOID		pClearDigitalChannel;
	VOID2VOID		pClearAllDigital;
	LONG2VOID		pSetDigitalChannel;
	VOID2VOID		pSetAllDigital;
	LONG2BOOL		pReadDigitalChannel;
	VOID2LONG		pReadAllDigital;
	LONG2LONG		pReadCounter;
	LONG2VOID		pResetCounter;
	LONGLONG2VOID	pSetCounterDebounceTime;
};

Vielen Dank für deine Hilfe.
07.04.2007 14:26 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Beni
myCSharp.de-Mitglied

Dabei seit: 07.04.2007
Beiträge: 4
Entwicklungsumgebung: VS2005

Themenstarter Thema begonnen von Beni

Beni ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ich habs raus... es lag tatsächlich an der dll...

Danke trotzdem

Beni
07.04.2007 17:37 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Zwischen diesen beiden Beiträgen liegen mehr als 5 Monate.
River River ist männlich
myCSharp.de-Mitglied

Dabei seit: 11.01.2007
Beiträge: 6
Entwicklungsumgebung: VS 2005 - C# Express
Herkunft: Dortmund


River ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hi.
Ich hab jetzt das gleiche Problem. Könntest du vielleicht veraten, wie du das Problem gelöst hast?

Gruß
Taner
17.09.2007 20:46 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Beni
myCSharp.de-Mitglied

Dabei seit: 07.04.2007
Beiträge: 4
Entwicklungsumgebung: VS2005

Themenstarter Thema begonnen von Beni

Beni ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ich verwendete eine neuere Version der dll. Dann hats geklappt.
Wo genau der Fehler in der alten Version lag, kann ich die nicht sagen.
17.09.2007 21:04 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
River River ist männlich
myCSharp.de-Mitglied

Dabei seit: 11.01.2007
Beiträge: 6
Entwicklungsumgebung: VS 2005 - C# Express
Herkunft: Dortmund


River ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

danke für die schnelle Antwort.

Auch mit dieser Version
 http://www.users.fh-sbg.ac.at/~kschuste/vellemann.php

der k8055D.dll.Datei, die extra für c# neugeschrieben worden ist, erhalte ich den Fehler. Der Fehler taucht ja nur beim debuggen auf, nicht in der Build-Version, aber gut ist das sicher nicht!
17.09.2007 21:30 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 12 Jahre.
Der letzte Beitrag ist älter als 12 Jahre.
Antwort erstellen


© Copyright 2003-2019 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 15.12.2019 19:18