Und wiedermal ein dll Problem
-
Hi, hab follgenden Code
#include "K8055D.h" #include <iostream> using namespace std; int main() { int status; long int aData=-1; // 1. Open Card 0 cout<<"\nOpening card 0..."; status = OpenDevice(0); if(status <0) // Check is OpenDevice was successful { cout<<"\nERROR! Unable to open card 0...EXITING.\n"; return -1; // Exit on failure } // 2. Clear Analog Channel 1 cout<< "\n\nClearing Analog Channel 1..."; ClearAnalogChannel(1); // 3. Read in value from Analog channel 1 aData = ReadAnalogChannel(1); cout<<"\nValue read from Analog Channel 1 = "<<aData; // 4. Ask user to enter a value to send to Analog channel 1 cout<<"\n\nEnter an integer (0-255) to be sent to Analog Channel 1 : "; cin >>aData; // 5. Send the user input value to Analog Channel 1 cout<<"\nSending input value to Analog Channel 1."; OutputAnalogChannel(1,aData); // 6. Read in value from Analog channel 1 aData = ReadAnalogChannel(1); cout<<"\nValue read from Analog Channel 1 = "<<aData; // 7. Close Device cout<<"\n\nClosing card 0..."; CloseDevice(); cout<< "Done.\n\nPress the Enter key to exit..."; char ch; cin.get(ch); cin.get(ch); return 0; }
Kompiliert einwandfrei, und sol wie ihr sihcerlich schoin festgestellt habt mit hilfe der K8055.h dann die dll ansprechen. Bekomme follgende Fehlermeldung
inker-Vorgang läuft... example.obj : error LNK2001: Nichtaufgeloestes externes Symbol __imp__CloseDevice@0 example.obj : error LNK2001: Nichtaufgeloestes externes Symbol __imp__OutputAnalogChannel@8 example.obj : error LNK2001: Nichtaufgeloestes externes Symbol __imp__ReadAnalogChannel@4 example.obj : error LNK2001: Nichtaufgeloestes externes Symbol __imp__ClearAnalogChannel@4 example.obj : error LNK2001: Nichtaufgeloestes externes Symbol __imp__OpenDevice@4 Debug/rapid.exe : fatal error LNK1120: 5 unaufgeloeste externe Verweise Fehler beim Ausführen von link.exe.
hab schon probiert ob es daran liegt das ich im Source-Code bei OpenDevice kein
k8055d obj obj.OpenDevice(CardAddress)
einegfügt hab
Hilft leider auch net.
Wo ist den der Fehler?
mario
-
Man muss noch die DLL hinzulinken über ne Import Library. Hast du eine .lib Datei?
-
Nein das is ja die Kacke.
Hba vom hersteller eh auch c plusplus foiles (Header, cpp usw) bekommen, aber unter dem ordner BCB und ich schätze mal das steht für Borland C++ Builder, und der vertägts sich net ganz mit dem microsoft visual c++ das ich verwenden muß.
-
Zur Not kannst du die Funktionszeiger ja über LoadLibrary und GetProcAddress holen.
-
kannste die dateien mal ins web laden? dann kann man sich mal anschauen was dabei ist
-
jo sollt scho gehen, wenn mann das hier net kann muß ich dich aber bitten die a bissekr zu gedulden weil ich hab die zugänge zu der ftp unseres anbieters net da.
-
bei http://www.rapidshare.de/ kannst du schnell was uploaden
-
Aja, da bin ich heut auf der suche nach hilfe eh schon druaf gestoßen
hat er mal wieder nicht geschalten.Hier der Link
[url]
http://rapidshare.de/files/4075369/BCB.rar.html
[/url]
-
Du hast Recht, die lib ist nicht für Visual C++ geeignet. Source der DLL ist auch nicht dabei. Sieht schlecht aus.
Frag doch mal beim Hersteller nach wie die sich das vorgestellt haben, wie man die DLL mit Visual C++ benutzen soll.
Aber sind ja nicht viele Funktionen, da kann man auch GetProcAddress benutzen.
-
Werd mal mit GetPro.. probieren., mal schauen ob ich das zusammen bring. Auf jedenfall mal Vielen Dank für die Unterstützung
cu mario
-
Wenn du das hinkriegst - sagst du dann, wie es geht? Ich hab das neulich mal versucht und bin kläglich daran gescheitert, einen Parameter zu übergeben.
-
lol. gibt doch genügend beispiele im netz
-
Vielleicht hilft das. Habe ich aus einer Headerdatei für eine Dll.
So ganz blicke ich zwar noch nicht durch, aber es funktioniert.HINSTANCE hDll; typedef BYTE (CALLBACK* pDLLInit) (BYTE); //Rückgabewert = BYTE und Parameter = BYTE FARPROC lpfnInit; pDLLUsbInit Init; int LoadMyDll() { hDll= LoadLibrary("myDll.dll"); if (hDll==NULL) { MessageBox(NULL, "Dll could not be opened", "Error", MB_OK); return false; } lpfnInit = GetProcAddress(HMODULE(hDll), "Init"); Init = pDLLInit(lpfnInit); return true; } void UnloadMyDll() { FreeLibrary(hDll); }
Der Aufruf im Programm würde dann so aussehen :
LoadMyDll(); // Kann nun die Funktion Init() benutzen .... BYTE result, parameter; // nur ein Beispiel result = Init(parameter); .... UnloadMyDll();
-
Hi Paul_C,
hab den Code eingefügt bzw adapiert, jedoch beleibt es bei der selben "graußlichen" Fehlermedlung
example.obj : error LNK2001: Nichtaufgeloestes externes Symbol __imp__CloseDevice@0
Trotzdem mal vielen Dank für den Tipp bzw die Hilfe
mario
-
estartu_de schrieb:
Wenn du das hinkriegst - sagst du dann, wie es geht? Ich hab das neulich mal versucht und bin kläglich daran gescheitert, einen Parameter zu übergeben.
Wenn ich ers hinbekomm, sag ich es dir slebstverständlich und schick dir den Code.
mfg mario