Autor Beitrag
DonKnilch
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 22



BeitragVerfasst: Do 26.07.07 10:33 
Hallo,

Ich möchte eine von mir geschriebene C++ DLL unter C# einsetzen. Diese habe ich mit DLLImport eingebunden. Allerdings wird mir dann zur Laufzeit immer gesagt, dass die DLL nicht gefunden wurde (DllNotFoundException). Diese befindet sich jedoch im selben Verzeichnis wie die C# Datei (.cs) und zusätzlich noch im bin-Ordner (wollte ich mal testen). Es werden in der DLL auch keine anderen DLLs verwendet bzw aufgerufen.

Woran könnte das liegen? Ich bin für jeden hilfreichen Tipp dankbar.

MfG
DonKnilch


Moderiert von user profile iconChristian S.: Topic aus C# - Die Sprache verschoben am Do 26.07.2007 um 10:49
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Do 26.07.07 10:50 
Liegt sie im bin oder im bin\debug bzw bin\release Ordner? Sie muss schon dort liegen, wo die exe-Datei ist (oder halt in einem der Standardordner).

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
DonKnilch Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 22



BeitragVerfasst: Do 26.07.07 11:11 
Ok, das war die Lösung. Danke. Manchmal kann es auch so einfach sein.

Jetzt habe ich dafür ein anderes Problem: Jetzt sagt er mir, dass eine EntryPointNotFoundException aufgetreten ist. Wie genau kann ich das verhindern? Ich habe mal versucht, beim DllImport den EntryPoint anzugeben (= Name der Methode), aber das hat leider auch nichts gebracht.
Tobias O
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Fr 27.07.07 14:17 
Hm... dann hast du irgendetwas falsch geschrieben (denke ich mal...) Poste doch mal den Code, vllt. kann man was sehen...

Oder du hast das selbe Problem wie ich, womit ich zu einer guten Überleitung zu einer weiteren Frage in diesem Thread komme:

Ich habe eine C++ DLL (gleich vorweg, ich habe sehr schlechtes C++ Wissen), welche in einer Klassenstruktur aufgebaut ist. Nun will ich ein Tool in C# schreiben, welches auf die DLL zugreift und alles daraus benutzen kann.
Ich habe einen C++ Code, worin einfach ein Objektpointer angelegt wird, mit dem dann gearbeitet wird. Wie kann ich mir ein Objekt der Klasse anlegen? Oder gibt es wenigstens einen Weg auf die Funktionen zuzugreifen, auch wenn ich kein Objekt anlegen kann?
Hier ein paar Code Snippets aus C++:

Die Funktion in der DLL, welche ich aufrufen will:
ausblenden Quelltext
1:
Handle CSerialInterface::Echo(u_16 echoCounter, u_8 echoDataLength, const u_8 *echoData)					


Das Erstellen des Objektes unter C++ in der Headerdatei der MainForm:
ausblenden Quelltext
1:
CSerialInterface *mInterface;					


Der Aufruf unter C++ (wenns unter C# nur so einfach wäre *g* ):
ausblenden Quelltext
1:
mInterface->Echo(0,0,NULL);					


Ich probiere da jetzt schon lange dran rum. Das Liebste wäre mir, wenn ich die Funktion direkt aufrufen könnte... Aber das ist nicht so leicht. Das schlimme ist ja, dass ich das mit dem Mobile Framework mache, wo man bei einer Fehlermeldung nichts gesagt bekommt :( (NotSupportedException)

Das nächste Problem wird durch den Pointer im Funktionsaufruf gestellt, aber ich glaube das müsste ich damit hinbekommen haben:

ausblenden Quelltext
1:
2:
[DllImport("SPLib.dll")]
public static extern UInt16 Echo(UInt16 echoCounter, bzte echoDataLength, [In, MarshalAs( UnmanagedType.FunctionPtr)] byte echoData);
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Fr 27.07.07 14:49 
Hallo!

Bitte pro Thread nur eine Frage, das gibt sonst ein heilloses Durcheinander. Ich mache daher hier zu.

Grüße
Christian

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Dieses Thema ist gesperrt, Du kannst keine Beiträge editieren oder beantworten.

Das Thema wurde von einem Team-Mitglied geschlossen. Wenn du mit der Schließung des Themas nicht einverstanden bist, kontaktiere bitte das Team.