Probleme bei Funktionsaufruf aus einer Include-Datei der MS-SDK in Visual C++ 2008



  • Du musst immer *zuerst* windows.h includieren!



  • Danke. Nun habe ich das ganze Sammelsurium an Fehlern nicht, leider habe ich jetzt einen anderen Fehler, betreffend den Linker. Alle meine einzelnen cpp-Dateien und h-Dateien lassen sich einzeln Fehlerfrei compilieren, wenn ich die ganze Projektmappe compiliere kommt folgender Fehler:

    wlanfunc.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""extern "C" unsigned long __stdcall WlanOpenHandle(unsigned long,void *,unsigned long *,void * *)" (?WlanOpenHandle@@$$J216YGKKPAXPAKPAPAX@Z)".
    C:\Dokumente und Einstellungen\dbogovic\Desktop\Smartphone & Windows Programming\Lern und TestProgramme\WChat_TestNW\Debug\WChat_TestNW.exe : fatal error LNK1120: 1 nicht aufgelöste externe Verweise.

    der Code:

    PHANDLE SetNewHandle(DWORD clientVersion) {
    PDWORD negotiatedVersion; //out
    PDWORD APInV; //out, für API-Aufruf

    PHANDLE handleFirst; //out, der Handler
    PHANDLE APIhF; // out, für API-Aufruf

    DWORD cV;
    cV = clientVersion;

    WlanOpenHandle(cV, NULL, APInV, APIhF);

    negotiatedVersion = APInV;
    handleFirst = APIhF;

    return handleFirst;
    }

    Jetzt mit den richtigen Pointerverweisen läuft das alleine compiliert.
    Ich habe auch diese cpp schon auf __stdcall umgestellt.

    Wie verhindere ich LNK2001, die Typen für WlanOpenHandle sind korrekt, irgendwas mit dem Linker muss ich noch beachten.

    Im übrigen bin ich im Nebenfach in Informatik studiert, habe im Beruf zwar nicht in der Softwareherstellung, aber in der IT-Brachen gearbeitet.
    Kenne mich gut mit Netbeans und umgebung aus, also Java SDK, und möchte ein bisschen mich näher mit Visual C++ beschäftigen.

    Meine Schwierigkeiten sind dabei nur die ganzen Modalitäten dieser IDE, also die korrekten Einstellungen, der Linker, gewisse eigentlich Einfachheiten die man sich einfach zeigen lassen muss. Vom Progrqammieren her sollte ich nach dem Umstieg von Java auf C und C++ Syntax und Semantik eigentlich keine Probleme haben.

    Ich komme mal auf den Grund, ich brauch eine kleine Einführungshilfe für die IDE (VC++ 2008), aber nichts zum Programmieren, sondern über die Funktionsmodalitätten der IDE, damit ich endlich loslegen kann.
    Hat mir da jemand irgendwas im Internet oder ein Buch?

    ciao



  • versteh ich dich richtig?
    du machst aus deinen *cpp & *h ein eigenes project das dann ne *.dll oder *.lib ergibt!

    dann must du nur die lib noch in dein project mit einbinden. entweder in vc selbst unter projecteigenschaften oder im code mit #pragma comment (lib,"*.lib")



  • Es hat Irgendwie nicht geklappt, nach all möglichem Rumprobieren...
    Folgend ist mein Testprojekt aufgebaut:

    VC++, CLR-Projekt, Konsolenprojekt

    Headerdateien
    resource.h
    stdafx.h mit includen von windows.h, wlanapi.h

    Quelldateien
    AssemblyInfo.cpp mit includen stdafx.h, Code für
    Plattformkompatibilität, Version, usw.
    FUNKTIONIERT alleine compiliert
    stdafx.cpp mit includen stdafx.h, einbinden von Standard includes
    FUNKTIONIERT alleine compiliert
    programm.cpp mit includen stdafx.h, enthält main und meine kleine
    Testfunktion, includen von speziellen headers, usw.
    FUNKTIONIERT alleine compiliert

    Resourcedateien
    erstmals unwichtig, z.B. das Icon BMP; ohne Code

    Als Projekt compiliert gibt es den LNK2001-Error, es besteht also ein Linker-Problem, der Code an sich ist fehlerfrei.

    Was muss ich genau machen, damit das ganze Projekt läuft. Es soll eine executable rauskommen + übliche weitere Dateien des Projekts im Verzeichnis
    %projektdir%debug.

    An den einzelnen Eigenschaften habe ich auch schon gewerkelt
    (/clr, /clr:pure - /Gz, /Gr /Gd und und und so weiter.

    Die Vrerzeichnisse sind auch alle richtig gesetzt, für .lib + .h.

    Es ist wohl für mich, zwar nicht in der Programmierung, oder der C/C++-Programmierung, aber als Anfänger in der VC++ IDE 2008 wohl schwierig das Ding zum laufen zu kriegen.

    hier nochmal die Fehlermeldung:

    WChat_TestNW.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""extern "C" unsigned long __stdcall WlanOpenHandle(unsigned long,void *,unsigned long *,void * *)" (?WlanOpenHandle@@$$J216YGKKPAXPAKPAPAX@Z)".
    C:\Dokumente und Einstellungen\dbogovic\Desktop\Smartphone & Windows Programming\Lern und TestProgramme\WChat_TestNW\Debug\WChat_TestNW.exe : fatal error LNK1120: 1 nicht aufgelöste externe Verweise.

    ciao



  • Hallo,

    die Funktion WlanOpenHandle befindet sich in der Wlanapi.lib, wie hier:

    http://msdn.microsoft.com/en-us/library/ms706759(VS.85).aspx

    zu sehen. Diese muss dem Linker bekannt gegeben werden, wie schon vorher geschrieben wurde.

    MfG,

    Probe-Nutzer



  • OK, vielen Dank. Das läuft jetzt, und ich habe was dazu gelernt.
    Jetzt habe ich ein Problem. Wenn ich die Konsolenanwendung starte, läuft diese zwar, aber es erscheint ein Dialogfenster:

    ________________________________________________________________________________
    WChat_TestNW.exe - Komponente nicht gefunden
    ________________________________________________________________________________
    Die Anwendung konnte nicht gestartet werden, weil Wlanapi.dll nicht gefunden wurde. Neuinstallation der Anwendung könnte das Problem beheben.

    OK
    _______________________________________________________________________________

    Wie binde ich jetzt diese dll ein, die Verzeichnisse sind gessetzt um sie zu finden?
    Worin liegt das Problem, wenn eh durch den Aufruf

    #pragma comment (lib,"wlanapi.lib")

    das gelöst sein sollte?



  • was für projecteinstellungen hast du unter Konfigurationseigenschaft verwendung von MFC?
    - gemeinsam genutzte DLL
    - statische Bibliothek
    - stan.d.a.r.t Biblliothek

    ich denke du könntest dein problem lösen wenn du dein project umstellst auf statisch bzw stan.d.a.r.t.

    [NEW EDIT]
    sorry für die komische schreibweise von stan.d.a.r.t aber d.a.r.t ist anscheinend ein soooo schlimmes wort das es durch sternchen ersetzt werden muss 😕



  • also, die Einstellungen waren schon richtig, so weit war ich schon.
    Standard war eigenstellt.

    Ich habe die DLL wlanapi.dll nun mit #using eingebunden und zwar in der stdafx.h.

    #using <wlanapi.dll>

    In den Konfigutationseigenschaften des Projekts habe ich die #using direktive auch aufgelöst mit dem richtigen Verzeichnis.

    Leider kommt folgende Fehlermeldung:

    c:\dokumente und einstellungen\dbogovic\desktop\smartphone & windows programming\lern und testprogramme\wchat_testnw\wchat_testnw\stdafx.h(14) : fatal error C1113: #using-Fehler bei "c:\programme\microsoft sdks\windows\v6.0a\lib\wlanapi.dll".

    Vielen Dank im Voraus für den nächsten Beitrag, seit mir nicht böse, aber ich stehe grad zur Zeit komplett auf dem Schlauch 🙄


  • Mod

    Liest Du eigentlich irgend´eine Art von Doku?
    #using ist wohl gänzlich daneben.

    Das ist eine DLL des Betriebssystems. Du musst Deinem Projekt die passende LIB hinzufügen.
    Du mischt hier C++/CLI mit WinAPI.

    Beschränke Dich auf ein WinAPI Konsolen Programm und dreh nicht gleich an allen Schaltern, wenn was nicht geht.



  • Hallo,

    @rT!f@Ct schrieb:

    sorry für die komische schreibweise von stan.d.a.r.t aber d.a.r.t ist anscheinend ein soooo schlimmes wort das es durch sternchen ersetzt werden muss

    Standart (ich erlaube mir mal, das noch einmal so zu schreiben, zu diesem Zwecke darf ich das 😉 ) ist eine falsch geschriebene (wenn auch nur ein Buchstabe falsch ist, aber gerade deswegen sollte man das eigentlich nicht falsch schreiben müssen) Version von Standard, und auch noch die häufigste falsche, die man in einem Forum eigentlich nicht mehr sehen möchte, kann oder muss, weswegen eine "Zensur" dieser Art fast verständlich ist. 😉

    MfG,

    Probe-Nutzer


Anmelden zum Antworten