Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Tracert

Treue Seele

  • »Tracert« ist der Autor dieses Themas

Beiträge: 108

Wohnort: Braunschweig

Beruf: Student

  • Private Nachricht senden

1

26.07.2003, 00:00

CStrings in exportierten Klassen

Hallo mal wieder!

Ich habe ein kleines Problem mit dem exportieren einer Klasse (in eine DLL), die Variablen des Typs string (aus <string>) oder auch CString (aus <atlstr.h>) enthält. Jedes Mal erhalte ich solche Warnungen:

Zitat


IniFiles.h(7) : warning C4251: 'IniDatei::sDateiName' : class 'ATL::CStringT<BaseType,StringTraits>' erfordert eine DLL-Schnittstelle, die von Clients von class 'IniDatei' verwendet wird
with
[
BaseType=char,
StringTraits=ATL::StrTraitATL<char,ATL::ChTraitsCRT<char>>
]


Kann mir hier zufällig jemand auf Anhieb sagen, was dabei das Problem ist? Soo gut kenne ich mich mit DLLs etc. noch nicht aus, zugegebenermaßen.

Ich vermute, das steht mit dem anderen Problem im Zusammenhang, das ich bei der Geschichte habe: Mein Hauptprogramm (das die DLL benutzt) bricht gleich zu Beginn mit einer kryptischen Fehlermeldung hab, von wegen "Einsprungpunkt nicht gefunden". Jetzt kommt mir nicht mit veralteter DLL-Version oder so, die ist definitiv TOP neu erstellt und im Programmverzeichnis...

Wäre toll wenn jemand Rat wüsste!
TR

[Edit]
Außerdem funktioniert es auch problemlos wenn ich die fraglichen Klassen nicht verwende also nur eine einfache Test-Funktion aus der DLL aufrufe.
[/Edit]

2

26.07.2003, 01:00

Die Warnung dürfte nichts mit dem Problem zu tun haben. Die Warnung kommt daher, das die std::string Klasse oder auch die CString Klasse keine API zuordnung haben. CString hab ich noch nie benutzt und bei std::string ist eine API zuordnung auch net notwendig, da es eine Template Klasse ist und die kann man net Exportieren.

Die Warnung kannst du also einfach Ignorieren.
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

Tracert

Treue Seele

  • »Tracert« ist der Autor dieses Themas

Beiträge: 108

Wohnort: Braunschweig

Beruf: Student

  • Private Nachricht senden

3

26.07.2003, 10:39

Gut, ich verlass mich mal darauf, dass das so stimmt. ;) Werde ich heute halt ein wenig erweitertes Bug-Testing machen müssen...

TR

Tracert

Treue Seele

  • »Tracert« ist der Autor dieses Themas

Beiträge: 108

Wohnort: Braunschweig

Beruf: Student

  • Private Nachricht senden

4

26.07.2003, 11:45

OK, lag irgendwie daran, dass ich die Member-Funktion

Quellcode

1
string GetIniFileName();


im Hauptprogramm aufgerufen habe. Hab alles geprüft, keine Ahnung was der damit für ein Problem hatte. Also Funktion auskommentiert (in Programm und DLL) und alles neu erstellt und es lief. Kommentierung wieder entfernt (in beiden) und alles neu erstellt und schon lief auch die Funktion. ???

Also irgendwie ist mir die ganze DLL-Geschichte noch sehr suspekt. Ich hab zigmal alles komplett neu erstellen lassen, aber nach einem Aus- und wieder Einkommentieren geht es auf einmal? :ohoh:

Tracert

Treue Seele

  • »Tracert« ist der Autor dieses Themas

Beiträge: 108

Wohnort: Braunschweig

Beruf: Student

  • Private Nachricht senden

5

26.07.2003, 12:20

Ok, ich sollte meinen Internet-Anschluss entfernen, bevor ich euch immer nerve mit Dingen, die auf meiner eigenen Dummheit basieren.

Das ganze lag wohl daran, dass ich die DLL mal irgendwann in das Debug-Verzeichnis des Hauptprogrammes kopiert habe, um es auch ohne IDE starten zu können. Die neu erstellte DLL lag aber immer bloß im Hauptverzeichnis des Hauptprogrammes. Irgendwie benutzt die IDE in diesem Fall dann wohl immer die DLL aus dem Debug-Verzeichnis, wenn man das Programm startet. Ergo: Lag doch an einer veralteten Version.

Sorry, dass ich euch damit belastet hab.

Erst denken, dann fragen.
Erst denken, dann fragen.

Keine Sorge, irgendwann lerne ichs noch. :jojo:

Werbeanzeige