Dll kompilierung

Hallo
nachdem ich im VC++ Compiler eine obj-Datei erzeugt habe, soll
mit folgender Anweisung die dll erzeugt werden:

link -out:…\datei.obj -dll -entry:„DllEntryPoint“ datei.obj mcaduser.lib

Es soll eine Rechnung gemacht werden bei der ich die brauche.
Muss man diese irgendwie beim Erstellen der dll einbinden?
Oder wird das schon bei der Erstellung der obj-Datei gemacht?
Bei einer Rechnung mit „sqrt“ o.ä. gibt es Fehlermeldungen.

Gruss Christopher

Die Header werden vom precompiler eingelesen (eingebunden).

Welche Fehlermeldung bekommst Du denn ?

Micha

Hallo
beim kompilieren bekomme ich 6 warnings. Die kommen bei der funktionierenden Besipiel-dll aber auch. Beim erstellen der dll erscheint keine Fehlermeldung.
Allerdings wird in Mathcad (dafür ist die dll) beim rechnen z.B. der Wurzel sqrt(x) oder Potenz pow(4,4) ein „unexpected error“ ausgegeben. Einfache Rechnungen +,-,*,/ funktionieren, Deshabl hab ich gedacht das es an der math.h liegen könnte.

Gruß Christopher

Hallo Chris,

beim kompilieren bekomme ich 6 warnings.

wie lauten die Warnungen?

Gruß Patrick

Hallo Patrick,
ich bin mir sehr sicher das es nicht an den Warnings liegt sondern nur daran das bei der erstellung der dll die math.h nicht eingebunden wird. Beim erstellen (Kompilieren) in VC++ werden die Include Dateien noch nicht beachtet. Erst beim Ausführen. Ausführen muss ich aber nicht, da ich die dll mit dem Konsolenkommando erstelle. Hier allerdings fehlt definitiv die Einbindung der math.h
Ich weiss auch nicht wie es geht

Christopher

Hallo
beim kompilieren bekomme ich 6 warnings. Die kommen bei der
funktionierenden Besipiel-dll aber auch. Beim erstellen der
dll erscheint keine Fehlermeldung.
Allerdings wird in Mathcad (dafür ist die dll) beim rechnen
z.B. der Wurzel sqrt(x) oder Potenz pow(4,4) ein „unexpected
error“ ausgegeben

Das hat dann aber nix mehr mit dem Linker zu tun.
Welches Compilersystem verwendest Du denn ?
Kannst Du die anwendung in einem Debugger laufen lassen ?

Welche Warnungen waren das denn ?

Wird pow in der dll aufgerufen oder von dem anderen Programm welches die DLL verwendet ?!

Gruß

Michael

nicht eingebunden wird. Beim erstellen (Kompilieren) in VC++
werden die Include Dateien noch nicht beachtet. Erst beim

looool

Lies Dir mal etwas Literatur durch - den begriff precompiler.

Wie bereits geschrieben werden Includefiles - wie die math.h noch vor dem Compilieren in das Projekt mit einbezogen.
Zudem können Warnungen wichtig sein für eine Fehleranalyse!

Entschuldigung für die falsche Annahme. habe es selber gemerkt. Das kann man aber auch freundlicher sagen. Ich bin halt kein C Experte.
Hier sind die sechs Warnungen die beim Kompilieren erscheinen. Wie gesagt kommen die gleichen Warnings bei einer Beispiel-Dll. Diese Funktioniert in Mathcad aber ohne Probleme.

warning C4047: ‚function‘ : Anzahl der Dereferenzierungen bei 'unsigned int ’ und ‚const struct tagCOMPLEXARRAY *‘ unterschiedlich
warning C4024: ‚MathcadArrayAllocate‘ : Unterschiedliche Typen fuer formalen und uebergebenen Parameter 2
warning C4047: ‚function‘ : Anzahl der Dereferenzierungen bei 'unsigned int ’ und ‚const struct tagCOMPLEXARRAY *‘ unterschiedlich
warning C4024: ‚MathcadArrayAllocate‘ : Unterschiedliche Typen fuer formalen und uebergebenen Parameter 3
warning C4700: Lokale Variable ‚col‘ wurde ohne Initialisierung verwendet
warning C4700: Lokale Variable ‚row‘ wurde ohne Initialisierung verwendet

Gruß
Christopher

Entschuldigung für die falsche Annahme. habe es selber
gemerkt. Das kann man aber auch freundlicher sagen. Ich bin
halt kein C Experte.

Sorry - hast ja recht. Kann man auch freundlicher sagen. O:smile:
(War das lol so unfreundlich ? Ups)

Die Warnungen sind überwiegend falsche Datentypen und 2 mal uninitalisierte Werte.

Wenn die Datentypen unterschiedlich sind wird der Compiler den Typ annehmen der ihm am besten in den kram passt. Wäre immerhin eine Fehlermöglichkeit - der Compiler wandelt den Typ nicht in das um was eigentlich gedacht war. Hier können eventuell casts weiterhelfen - oder mal den Quelltext genau ansehen und die Typen ansehen.

Uninitialisierte Variablen können irgendeinen Wert haben. meist ist er Null. Aber diese Variablen führen oft zu schlaflosen nächten weil man sie im nachinein nur schwer findet.

Es kann sein das der wert col z.B. 0 ist - aber auch -12344335 was ja durchaus zu Problemen führen kann.

Welchen Compiler setzt Du ein ?

Wenn Du magst mail mir mal den Source der DLL zu und vllt. den Teil der die DLL aufruft - schau mir das dann gerne mal an.

Viele Grüße

Michael