Extene dll variablen



  • also wenn ich die adresse einer exportierten funktion harausfinden will nutze ich GetProcAddress, doch wie ist es mit exportierten varaiblen, nutze ich da auch GetProcAddress?, in msdn steht nur, das man GetProcAddress für funktionen nutzen kann, über variablen habe ich nichts gefunen.

    wenn es noch eine andere funkion gibt, für externe vaiablen: wie heisst sie?



  • Die Daten (Variable) einer DLL sind mit der rufenden Anwendung im selben Datenbereich verbunden. Allerdings kann man darauf aus der Anwendung gewöhnlich nicht direkt zugreifen. Üblicherweise greift man darauf mit DLL-Funktionen zu.

    Ich hoffe, ich habe deine Frage richtig verstanden.



  • ich mweine wie man auf valiablen zugreifen kann die mittels
    extern __declspec(dllexport) int nmul;

    eopriert zugreifen. unz zwar dynamisch ale mittels einer WINAPI-funktion, die einem die ardesse gibt.

    also ist GetProcAdress die richtige funktion,a cuh wen in der dokmatation nur etwas von funktionen steht?



  • Ich habe den Eindruck, du suchst etwas, was du nicht brauchst oder was es nicht gibt.

    Teile zum Verständnis erst einmal mit, wo (DLL, EXE, fremder Prozess) und wofür du wie auf die Daten zugreifen willst. Dann sehen wir weiter!🕶

    Noch eine Frage: 'Ist deine Tastatur kaputt?'



  • Du kannst mal mit depends.exe (unter VC tools) nachgucken, ob "dllexport" - deklarierte Variablen unter den exportierten Symbolen wirklich auch auftauchen.

    Wenn ja, sollte GetProcAddress gehen, wenn nein, geht wahrscheinlich auch nix anderes 🙂

    Überlicherweise sind DLL-Schnittstellen tatsächlich auf Funktionen begrenzt. Es spricht aber erstmal nichts dagegen, auch globale Variablen zu exportieren.



  • Ich denke auch es könnte gehen,
    probier es mal aus und poste bitte das Ergebnis.

    Gruß Frank



  • Frank Erdorf schrieb:

    Ich denke auch es könnte gehen, probier es mal aus und poste bitte das Ergebnis.

    Und was soll das bringen und was kann man damit anfangen? Ich brauche das nicht! :p



  • Hallo berniebutt,

    Ich habe soetwas bisher auch noch nicht gebraucht.
    Wenn ich Einfluß auf das dll Interface Design habe würde ich an solchen Stellen
    auch Funktionen nehmen. Schon alleine deshalb weil ich weiß das es funktioniert
    und weil die marginal bessere Perfomance normalerweise an solchen Stellen
    nicht relevant ist.

    Habe ich aber keinen Einfluß auf das dll Interface Design und
    muss z.B. das Laden der dll aus anderen Gründen auf GetProcAddress umstellen
    dann kann man das hier beschriebene Problem bekommen.

    In diesem Fall wüsste ich halt gerne ob es so geht oder nicht.
    Ich habe mir mittlerweile ein Verständnis Modell des dynamischen Linkers aufgebaut.
    Mit diesem Usecase will ich mein Modell prüfen und eventuell wieder ein Stückchen mehr vom dynamischen Linker verstehen.

    Ob ich soetwas dann irgendwann tatsächlich anwende ist davon unberührt.

    Gruß Frank



  • Frank Erdorf schrieb:

    ... In diesem Fall wüsste ich halt gerne ob es so geht oder nicht.... Ob ich soetwas dann irgendwann tatsächlich anwende ist davon unberührt.

    Hallo Frank Erdorf,

    ich betrachte alle Programmier-Techniken allein als Werkzeuge zur Realisierung eigener Aufgaben. Wenn ich weiss, mit welchem Werkzeug ich eine Aufgabe am besten lösen kann, ist es gut. Wofür soll ich über ein unklares Werkzeug nachdenken? Zeigt mir bitte den Hyperduper für DLLs, den ich noch nicht kenne. Und überzeugt mich, dass ich ihn tatsächlich brauche! :p



  • Hallo berniebutt,

    Und überzeugt mich, dass ich ihn tatsächlich brauche!

    😕

    ich habe gar nicht den Anspruch dich zu überzeugen.
    bitte nicht falsch verstehen.

    Gruß Frank



  • @berniebutt:

    Gegen globale, aus einem DLL exportierte Variablen ist technisch erstmal nix einzuwenden, ob man nun einen Funktions-Zeiger oder einen int-Zeiger hat, ist wurst. Die mangelnde Kapselung - wann verändert wer den Wert - mach das zu einer eher schlechten Wahl, aber die Wahl hat man nicht immer selbst.

    Manchmal sind es eben keine eigenen Aufgaben, und man muß damit leben, was schon da ist.

    Der letzte Satz ist natürlich falsch - es muß "meistens" lauten - ca. 80% aller Programmierjobs sind Wartung und Pflege existierender Produkte.



  • So habe Es mit GetProcAdress Geschafft, es funktioniert also
    (Es hat n bische länger geadauert, weil ich wichtigeres zur zeit zu tun hatte)



  • Blubb schrieb:

    So habe Es mit GetProcAdress Geschafft, es funktioniert also

    Gut, dann habe ich tatsächlich etwas dazu gelernt - was ich so nie benutzt habe und vielleicht nie benutzen werde.

    Irgendwie scheint mir da der Sinn von DLLs: "Dynamisch zu linkene Sammlung fertig benutzbarer Funktionen" aufgeweicht zu werden, wenn man nicht nur Funktionen sondern auch Daten exportieren kann. Aber meinetwegen! Die Übersichtlichkeit und gesicherte Kapselung der Daten ist dann wohl ein anderes Thema. Hierauf hatte peterchen hingewiesen!

    Ich denke, man muss nicht alles machen was funktioniert. Man verlangt dann jenen Leuten, die später das Programm pflegen sollen sehr viel ab.



  • in diesem fall hatte ich die Dll ja nicht selbst geschrieben



  • Blubb schrieb:

    in diesem fall hatte ich die Dll ja nicht selbst geschrieben

    Dann bist du in diesem Fall leider gekniffen und musst mit dem leben, was andere vorher verbrockt haben. So etwas kommt nun mal häufiger vor.
    Mein Rat an jeden DLL-Entwickler: Bitte nicht solche Sachen!


Anmelden zum Antworten