Laden...

DLL einbinden

Erstellt von f.ritz vor 19 Jahren Letzter Beitrag vor 19 Jahren 4.049 Views
f.ritz Themenstarter:in
341 Beiträge seit 2004
vor 19 Jahren
DLL einbinden

Hallo zusammen!

Ich möchte eine DLL(mit [DllImport("StringLib.Dll"]) bei mir einbinden, dabei krieg ich eine System.DllNotFoundException, d.h wenn ich es richtig verstehe dass diese DLL auf meinem Rechner gar nicht existiert. Wo krieg ich aber diese DLL her.

Ich bin ahnungslos, hilft mir!

X
2.051 Beiträge seit 2004
vor 19 Jahren

das bedeutet nur, dass die dll nicht gefunden werden kann und nicht, dass sie auf deinem rechner nicht existiert.

wenn eine dll geladen wird, wird sie im programmverzeichnis, dann im arbeitsverzeichnis, im systemverzeichniss und zum schluß in einem PATH-verzeichnis.

wass ich komisch aber finde, ist es, dass du eine dll nutzen willst und weiß nicht mal wofür die gut ist oder woher du sie bekommst. 8o

was ist das für eine dll? wie kommst du zu der annahme, dass du sie brauchst?

f.ritz Themenstarter:in
341 Beiträge seit 2004
vor 19 Jahren

Die StringLib.Dll möchte ich benutzen, um den String in C# im Verwalteten Speicherbereich in ein String ins Unverwalteten Speicherbereich zu transpontieren, damit kann ich dann diesen in anderen Programmiersprachen nutzen.
So war zumindest die Idee.

Diese Funktion möchte ich eigentlich benutzen:
[DllImport("StringLib.Dll")] public static extern void PassTBStr([MarshalAs(UnmanagedType.TBStr)] String data);

Hier krieg ich die oben erwähnte Exception:
PassTBStr("EinString");

Du sagst also diese DLL ist doch auf meinen Rechner, wie kann ich dann diese benutzen, muss ich noch was einrichten?

X
2.051 Beiträge seit 2004
vor 19 Jahren

ich vermute mal, dass StringLib.Dll gar nicht gibt. es ist nur ein Bsp. wie man MarshalXYZ_Klassen nutzt.

16 Beiträge seit 2004
vor 19 Jahren

Hast du schon versucht, die dll als Verweis mit einzubinden?

There are only ten types of people in the world. Those who understandy binary and those who do not.

X
2.051 Beiträge seit 2004
vor 19 Jahren

die dll gibt es gar nicht.

4.506 Beiträge seit 2004
vor 19 Jahren

Hallo!

Also wenn du Visual Studio benutzt (bei anderen Anwendungen weiß ich es nicht!), dann kannst du einfach im SolutionExplorer auf References rechtsklicken und add Refernce wählen, dann anschließend browse und zuletzt die dll auswählen.

Falls nicht, dann könntest du deine Festplatte doch auch einfach mal nach dieser dll suchen, um sie anschließend in dein projektverzeichnis (am besten gleich in das Verzeichnis mit der .exe) kopieren und es anschließend nochmals versuchen.

Ist das eine c# (oder .NET) dll? Denn es gibt wehemente unterschiede zwischen C++ und älteren dll´s und den jetzigen .Net dll´s!!!

Hast Du die dll selbst geschrieben?

Das sind alles Punkte die solltest Du nochmals überdenken bsw. noch hier angeben...

Ciao
Norman-Timo

A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”

16 Beiträge seit 2004
vor 19 Jahren

Habe die dll auch nicht gefunden, da ist quasi auch das Einbinden als Verweis ziemlich nutzlos.

Die dll scheint es schon irgendwie zugeben, allerdings sind die Informationen im Netzt sehr dürftig.

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpcondefaultmarshalingforstrings.asp

There are only ten types of people in the world. Those who understandy binary and those who do not.

4.506 Beiträge seit 2004
vor 19 Jahren

Ha!

Ich glaub ich weiß was los ist!

Mit der Hilfe des Links von develc!

Man sollte es einfach nur lesen!

Was f.ritz eigentlich wollte ist, dass sein String in den unmanaged Memory geschrieben wird!

Also benutzt er einfach die Funktion 'Invoke', weil:

Strings Used in Platform Invoke

Platform invoke copies string arguments, converting from the .NET Framework format (Unicode) to the platform unmanaged format. Strings are immutable and are not copied back from unmanaged memory to managed memory when the call returns.

The following table lists the marshaling options for strings when marshaled as a method argument of a platform invoke call. The MarshalAsAttribute attribute provides several UnmanagedType enumeration values to marshal strings.

Also ist das nicht schon die Lösung seines Problems?

Ich kann mir vorstellen, dass die StringLib.dll in einer allumfassenderen lib vorhanden (vielleicht System.String ???) ist.

Also...

Ciao
Norman-Timo

A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”

X
2.051 Beiträge seit 2004
vor 19 Jahren

noch mal. StringLib.dll gibt es nicht. das auf der seite ist nur ein bsp. wie man mit unmanaged strings imgehen muss. im bsp wird gezeigt, wie man funktionen, die als parameter verscheidene stringtypen erfordern, aus einer nicht managed dll importiert, und mit hilfe mon MarshalAs-Attribut eingibt wie die parameter zu handhaben sind.

die dll konnte auch xyz.dll heißen und eine funktion

void nutze_lpstr(LPSTR _str)
{
...
}

enthalten

dann würde im bsp. folgendes stehen

[DllImport("xyz.Dll")]
public static extern void nutze_lpstr([MarshalAs(UnmanagedType.LPStr)] String s);