Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Jul 18, 2025 07:54

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Do Dez 08, 2005 21:09 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Apr 25, 2005 17:51
Beiträge: 464
Naja der Titel is ein bisschen schwer zu wählen, deshalb jetzt ausführlicher:

Ich habe eine C-lib. Da ich diese nicht in Delphi einbinden kann, habe ich mir eine DLL geschrieben, welche die benötigten Funktionen ummantelt, also ne WrapperDLL sozusagen.
Die Funktionen geben immer nur BOOL zurück und erwarten manchmal Parameter(double und double*). Aufrufkonvention ist stdcall.

Mein Problem: wenn ich eine der Funktionen starte, wirft mir Delphi immer eine "Division durch Null"-Exception an den Kopf. Ich selber führe da aber keine Division durch und C-Funktionen können ja keine Exceptions schmeißen.
Wenn ich die DLL nun in Visual C++ einbinde, funktioniert alles wunderbar. Keine Exception, alles funzt. Falls wirklich ne Exception fliegt, würde die ja auch Visual C++ bemerken.

Ach ja ich habe die DLL mit Visual C++ Toolkit 203, mit dem GNU-Compiler und mit Visual C++ 2005 kompiliert. Bei allen dasselbe Verhalten.

Hat da wer ne Idee? Oder auch nur ne Vermutung, was das sein könnte?

Es macht auch keinen Unterschied, ob ich die DLL von Delphi laden lasse, oder selbst per Hand mit LoadLibrary rangehen, dasselbe Verhalten ... .

Bin irgendwie mal wieder in Delphi ideenlos, woran das liegen könnte.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Dez 08, 2005 21:12 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Schreib mal die Deklaration der Funktion auf C++ und Delphi Seite.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Dez 08, 2005 21:16 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Apr 25, 2005 17:51
Beiträge: 464
C++ Headerdatei
Code:
  1.  
  2. //
  3. BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved);
  4.  
  5. //
  6. BOOL __stdcall startConnection();
  7.  
  8. //
  9. BOOL __stdcall getCurrentVoltage(double* pValue,double maxWaitSec);
  10.  
  11. //
  12. BOOL __stdcall closeConnection();
  13.  


Delphi-Unit
Code:
  1.  
  2. type TpDouble = ^double;
  3.  
  4. FUNCTION startConnection() : BOOL; stdcall; external 'NiDaqCard.dll';
  5.  
  6. FUNCTION  getCurrentVoltage(pValue : TpDouble;
  7.                             maxWaitSec : double) : BOOL; stdcall; external 'NiDaqCard.dll';
  8.  
  9. FUNCTION closeConnection() : BOOL; stdcall; external 'NiDaqCard.dll';
  10.  


Was soll ich da jetzt ändern in der Unit?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Dez 11, 2005 13:31 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Apr 25, 2005 17:51
Beiträge: 464
Ich war jetzt auf der Herstellerseite, von wo die Bibliothek kommt. Da habe ich ein Post im Forum gefunden, wo dasselbe Problem auftrat( dort wars Borland C++). Kann ich irgendwie ausschalten, dass Delphi auf die Durch-Null-Exception reagiert?? Hab in den Einstellungen gesucht, aber bisher nichts passendes gefunden.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Dez 11, 2005 14:13 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 14, 2004 18:56
Beiträge: 804
Wohnort: GER/OBB/TÖL-WOR/Greiling
Du kannst glaube ich dem Prozessor sagen, dass er keine Division-durch-Null Exceptions werfen soll... irgendwas mit CW8087...

Code:
  1.  
  2. var CW8087: {keine ahnung was für ein typ...}
  3. ...
  4.  
  5. CW8087 := Default8087CW; //alten wert sichern
  6. Set8087CW(MCW_EM); //neuen wert setzen
  7.  


Ich hab keine ahnung, ob das in deinem fall hilft, ich hab das auch nur aus einem buch. aber einen versuch ists ja vielleicht wert.

_________________
Bild

"User Error. Replace User and hit Continue."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Dez 11, 2005 17:22 
Offline
DGL Member

Registriert: Sa Jan 22, 2005 21:10
Beiträge: 225
Der Typ ist Word.

_________________
[18:30] tomok: so wie ich das sehe : alles. was nich was anderes ist als nen Essay ist nen Essay

hi, i'm a signature viruz, plz set me as your signature and help me spread :)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Dez 12, 2005 17:02 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Apr 25, 2005 17:51
Beiträge: 464
erstmal danke für den Tipp, scheint die richtige RIchtrungzu sein
aber bei deinem kennt er das MCW_EM nicht. WO steht das? In der Doku ist kein EIntrag dazu.

Das steht in der Doku: Set8087CW(0x133f), aber da mag er die Hexzahl nicht annehmen: [Fehler] justiererForm.pas(64): E2029 ')' erwartet, aber Bezeichner 'x133f' gefunden

????


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Dez 12, 2005 17:07 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Apr 25, 2005 17:51
Beiträge: 464
ok mit dem $ geht es :)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Dez 12, 2005 17:13 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 14, 2004 18:56
Beiträge: 804
Wohnort: GER/OBB/TÖL-WOR/Greiling
Immer wieder gerne :D

_________________
Bild

"User Error. Replace User and hit Continue."


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 12 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 14 Queries | GZIP : On ]