ERLEDIGT
NEIN
NEIN
ANTWORTEN
6
6
ZUGRIFFE
378
378
EMPFEHLEN
-
29.07.11 16:24 #1
- Registriert seit
- Jul 2011
- Beiträge
- 7
Hallo,
ich habe eine DLL geschrieben und möchte diese in VB integrieren und einen Wert zurückbekommen. Nur leider stürzt VB sofort ab nachdem die Funktion aufgerufen wird.
VB
Deklaration Funktion
Code :1
Declare Function MooreRukovenaDLL Lib "C:\...\MooreRukovenaDLL.dll" Alias "_MooreRukovenaDLL@4" (ByRef p As Double) As Double
Den Alias habe ich über den Dumpbin /Exports Befehl ausgelesen.
Funktionsaufruf
Code :1
MooreRukovenaDLL (DQ)
C++
Deklaration Funktion
Code :1
extern "C" __declspec(dllexport) void WINAPI MooreRukovenaDLL(double*);
Funktion
Code :1 2 3 4
void WINAPI MooreRukovenaDLL(double* Dq) { *DQ = 1; }
Ich habe auch schon viele andere Varianten der Funktionsdeklaration in C++ verwendet, aber diese funktioniert am besten. Bei anderen Varianten wurde die DLL oft noch nicht mal von VB gefunden.
Ich bin nach zwei Tagen ausprobieren mit meinen Latain am Ende.
Vielleicht hat ja jemand von euch eine Lösung parat.
Besten Dank im Voraus!
-
hast du mal versucht keinen pointer zu übergeben sondern nur werte?
ausserdem deklarierst du die funktion als double in VB, aber als void in C.
-
01.08.11 08:36 #3
- Registriert seit
- Jul 2011
- Beiträge
- 7
Hallo,
danke für die Antwort. Ich habe beide Varianten durchgeführt, dass Ergebnis ist allerdings das gleiche.
Excel stürzt nach dem Funktionsaufruf sofort ab.
Ich könnte noch verrückt werden.
-
01.08.11 10:23 #4
- Registriert seit
- Jul 2011
- Beiträge
- 7
Ich habe den Fehler jetzt eingegrenzt.
Und zwar deklariere ich in der DLL zwei 2D dynamische Float Felder, mit ca. 11000 Elementen in jeder Dimension. Wenn ich eines der Felder, egal welches, auskommentiere funktioniert meine DLL. Nur wenn ich beide zur gleichen Zeit verwende stürzt Excel ab.
Ich verstehe den Fehler nicht. Könnte es darin liegen, das die beiden Felder zusammengenommen für eine DLL zu groß sind?
Als Exe finktioniert der Code wunderbar.
-
Wie deklarierst du diese Felder? Mit 'new' oder 'malloc' sollte es kein Problem sein, ansonsten sprengst du vermutlich den Stack.
Gruß
MCoder"The three chief virtues of a programmer are: Laziness, Impatience and Hubris."
--- Larry Wall
-
01.08.11 11:18 #6
- Registriert seit
- Jul 2011
- Beiträge
- 7
Ich deklariere die Felder mit 'new'.
Mich verwundert warum die Exe funktioniert und die DLL nicht.
Das macht doch gar keinen unterschied.
-
02.08.11 10:50 #7
- Registriert seit
- Jul 2011
- Beiträge
- 7
Ok, ich habe meinen Code etwas umgeschrieben so das es jetzt funktioniert.
Nun möchte ich allerdings noch ein 2d Array von VB an die DLL übermittel.
Wie geht das? Hat jemand ein Code-Beispiel?
Mit den Lösungen die ich in Google gefunden habe, kann ich nichts anfangen.
Gruß
Ähnliche Themen
-
htaccess implementieren ?
Von kroesi im Forum Hosting & WebserverAntworten: 8Letzter Beitrag: 31.01.08, 09:35 -
Profiler in CPP implementieren
Von sahili im Forum C/C++Antworten: 0Letzter Beitrag: 28.06.07, 15:31 -
BufferedReader implementieren
Von tbgeeee im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 0Letzter Beitrag: 06.02.07, 16:14 -
BB-Code in PHP implementieren
Von Scorpion-Stinger im Forum PHPAntworten: 13Letzter Beitrag: 17.11.06, 16:15 -
Pearl in JSP implementieren
Von Anna knolli im Forum Enterprise Java (JEE, J2EE, Spring & Co.)Antworten: 4Letzter Beitrag: 26.11.03, 13:52





Zitieren
Login






