DLL einbinden...
-
@webFritzi
Wie er sagte, hat aus irgendwelchen Gründen keine LIB.Hier ist Optionen eine optionale Liste einer oder mehrerer IMPLIB-Optionen, BibName der Name für die neue Importbibliothek...
-
Original erstellt von DJ BlackEagle:
Wie er sagte, hat aus irgendwelchen Gründen keine LIB.Eben, deshalb schrieb ich, wie er IMPLIB benutzen soll, um eine zu bekommen. Stehst wohl etwas auf dem Schlauch, wie?
[EDIT] *lol* Der, der auf dem Schlauch steht, bin wohl ich!
Sorry, DJ, hatte deinen Beitrag völlig übersehen. [/EDIT]
[ Dieser Beitrag wurde am 28.02.2003 um 21:47 Uhr von WebFritzi editiert. ]
-
Irgendwie klappt das mit implib nicht... ich bekomme immer einen Declaration Syntax Error, wenn ich das im Vereinbarungsteil mit einbaue, und drei andere, wenn ich das im normalen Quelltext mit einbaue... Wie soll ich das jetzt machen???
Entschuldigung, wenn ich noch Anfänger bin...
Das mit dem dynamischen einbinden: Ich verstand nicht, was iSumme da soll...Entschuldigt mich...
-
Original erstellt von aaaabyx:
Entschuldigung, wenn ich noch Anfänger bin...OK, aber auch nur das entschuldigt dich.
Du musst die Zeile natürlich nicht im Quellcode einbauen! IMPLIB ist ein Kommandozeilen-Tool. Das heißt, dass du es in der Konsole (Eingabeaufforderung) im Prompt eingeben und dann auf Return drücken musst. Dabei solltest du dich in dem Verzeichnis befinden, in dem deine DLL steht.
-
Dankesehr an euch zwei... Das einbinden klappt, ich hab' 'ne Lib...
Aber :Ich hab' in meiner DLL zwei Funktionen...Beide korrekt mit
extern "C" __declspec(dllexport)
exportiert... Ich hab' also die Lib zum Projekt hinzugefügt, die Funktionen mit
extern "C" __declspec(dllimport)
im Projekt importiert, und versucht sie zu benutzen...
Bei der ersten geht dies ganz gut, ich krieg zwar eine "ungültige Zeigeroperation"(woran kann das liegen???), aber so viel macht das nicht aus... Die Funktion funktioniert... jetzt aber zur zweiten... Wenn ich den Aufruf der 2. Funktion versuche mitzucompilieren, krieg' ich 'nen Linker Fehler.:Undefined Symbol _GetNormalText referenced from ...[Pfad einer Projektdatei(ATest.obj)]...
Hier ist der momentane Quelltext der Projektdatei, aus der ich die dll aufrufe://--------------------------------------------------------------------------- #include <vcl\vcl.h> #pragma hdrstop #include "ATest.h" //--------------------------------------------------------------------------- #pragma resource "*.dfm" TForm1 *Form1; extern "C" __declspec(dllimport) String GetCodedText(String, String); extern "C" __declspec(dllimport) String GetNormalText(String, String); //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::Edit1Click(TObject *Sender) { if (CheckBox1->Checked==true) { Label1->Caption=GetCodedText(Edit1->Text, "0"); } else { // Label1->Caption=GetNormalText(Edit1->Text, "0"); } } //---------------------------------------------------------------------------
Könnt ihr mir irgendwie helfen???
[ Dieser Beitrag wurde am 01.03.2003 um 16:14 Uhr von aaaabyx editiert. ]
-
Hast du dann auch die lib ins Projekt eingebunden?
-
Klaro... Das merkwürdige ist ja, dass eine Funktion richtig funktioniert(mit Fehlermeldung...
), die andere gar nicht...(Linker Fehler, siehe alles im letzten Beitrag...)
ALSO: Wenn ich das
// Label1->Caption=GetNormalText(Edit1->Text, "0");
mitcompiliere, kriege ich einen Linker Fehler, hier
Label1->Caption=GetCodedText(Edit1->Text, "0");
funktioniert aber alles...
[ Dieser Beitrag wurde am 02.03.2003 um 11:06 Uhr von aaaabyx editiert. ]
-
Haste im Import den Funktionsname richtig geschrieben, achtung case-sensetive.
Und hast du in der dll das funktionsname im export reingeschrieben???
-
Ja, ich hab's 10 mal überprüft, die Namen stimmen alle überein(s.u.).
In der dll hab' ich nur folgendes im Vereinbarungsteil stehn:
extern "C" __declspec(dllexport) String GetCodedText(String, String); extern "C" __declspec(dllexport) String GetNormalText(String, String);
Hab' ich was falsch gemacht???
UND: Was heißt case-sensitive???
[ Dieser Beitrag wurde am 02.03.2003 um 21:00 Uhr von aaaabyx editiert. ]
-
Verwende ebenfalls dllexport in deinem Projekt.
-
Das läuft genau aufs gleiche hinaus...
-
Zeig mal, wie die zweite Funktion aussieht.
-
im Vereingarungsteil:
char Annalyt[208];
String GetNormalText(String NCodedTextIm, String NPasswordIm) { Annalyt[1]='0'; Annalyt[2]='1'; Annalyt[3]='2';
...
...
Haufen von 208 zuweisungen...
...
...Annalyt[206]='>'; Annalyt[207]='|'; Annalyt[208]=' '; AnsiString NCodedText=NCodedTextIm; AnsiString NPassword=NPasswordIm; AnsiString BackNormalText; int g=1; int f=1; while (NCodedText.Length()>BackNormalText.Length()) { int z1=1; bool Done2=false; while ((z1<=208)&&(Done2==false)) { if (NCodedText[g]==Annalyt[z1]) { Done2=true; } else { z1++; } } int z2=1; Done2=false; while ((z2<=208)&&(Done2==false)) { if (NPassword[f]==Annalyt[z2]) { Done2=true; } else { z2++; } } int e2=z1+104-z2; BackNormalText=BackNormalText+Annalyt[e2]; g++; if (f==NPassword.Length()) { f=1; } else { f++; } } return BackNormalText; }
Es ist noch nicht die Ausgereifte Version...
[ Dieser Beitrag wurde am 02.03.2003 um 21:34 Uhr von aaaabyx editiert. ]
-
Ist bei dir in "Projekt->Optionen->Linker" das Kästchen "Dynamische RTL verwenden" angeklickt oder nicht?
-
Nein.
-
Aha. Wenn du es anklickst, dann läuft es. Schau dir mal genau den Text an, der ganz oben im Code deiner DLL steht. Der steht da nämlich nicht umsonst!
-
Es läuft alles aufs selbe hinaus:
Ich habe jetzt die dll geöffnet, Dynamische RTL verwenden aktiviert, das Projekt neu compiliert und gespeichert... Funktioniert nicht... Auch nicht, wenn ich das selbe mit dem Aufrufenden Projekt mache...
Auch, wenn ich BCBMM.lib zum Projekt hinzufüge, funktioniert es nicht...
-
Mist... Entschuldigt dass ich euch so lange mit diesem Problem aufgehalten habe... Ich habe etwas Scheiße gebaut... Ich habe die ganze Zeit in meinem Projekt 'ne Uralt-Lib verwendet... Da war die Funktion noch nicht deklariert
Aber jetzt gibt's immer noch das Problem mit der MessageBox (Ungültige Zeichenoperation, die es bei beiden Funktionen gibt..) Kann mir da jemand helfen?
-
Also die Fehlermeldung heißt "Ungültige Zeigeroperation"... Hatte das jemand schon mal???
Der Fehler tritt nur auf, wenn ich die Funktion aus der DLL lade... Habe ich sie im Projekt mit drin, Gibt es keine Fehlermeldung.[ Dieser Beitrag wurde am 03.03.2003 um 13:38 Uhr von aaaabyx editiert. ]
-
Es hilft nichts, du musst wohl den Code hier posten. Kommt der Fehler auch, wenn du die Funktionen aus der DLL garnicht verwendest? Wenn du also einfach nur die DLL statisch linkst?