ERLEDIGT
NEIN
NEIN
ANTWORTEN
13
13
ZUGRIFFE
3304
3304
EMPFEHLEN
-
10.09.04 14:34 #1
- Registriert seit
- Sep 2004
- Beiträge
- 8
Liebe Programmierer,
ich habe eine DLL zum ausprobieren bekommen.
Die DLL hat drei Aufgaben:
1. MsgBox aufrufen
2. ein String in einer MsgBox darzustellen
3. liefert ein Wert zurück (1.23456)
im Anhang findet ihr die DLL ihrer VC++ Quellcode.
Wie binde ich diese DLL in VB 6.0? kann jemand mir ein Beispiel bezogen auf die DLL im Anhang basteln.
Mit freundlichen Grüßen
Scherbel
-
10.09.04 14:45 #2
- Registriert seit
- Sep 2004
- Beiträge
- 8
Der Anhang ist zu Groß,
hier ist der Quellcode (VC++):
CCtcConfig::CCtcConfig()
{
}
CCtcConfig::~CCtcConfig()
{
}
CCtcConfig::Test1(void)
{
MessageBox ( 0 , "DLL-Aufruf erfolgreich" , "Moin" , MB_OK ) ;
}
CCtcConfig::Test2(std::string sMyString)
{
MessageBox ( 0 , sMyString.data(), "Moin" , MB_OK ) ;
}
double CCtcConfig::Test3(void)
{
return(1.2345);
}
-
Habe den Code jetzt nicht ausprobiert, aber so sollte es funktionieren:
Eventuell must du die DLL noch ein wenig anpassen. Ich weiß nicht, wie das mit Klassen in einer DLL ist (zu sehen am Konstruktor und Destruktor).Code :1 2 3 4 5 6 7 8 9 10 11 12 13
Private Declare Function Test1 Lib "ctctest.dll" () Private Declare Function Test2 Lib "ctctest.dll" (ByVal sMyString As String) Private Declare Function Test3 Lib "ctctest.dll" () As Double Private Sub Form_Load() Call Test1 Call Test2("Das ist ein Test") Dim doubleWert As Double doubleWert = Test3() Msgbox "doubleWert: " & doubleWert End Sub
Einfach mal ausprobieren!
mfG,
MANBLT - Die Bundesliga Tabelle der Saison 2011 / 2012 - http://www.spacehoster.de/blt/ NEU: mit Tippspiel!
EMail: mstangel@gmx.de
-
13.09.04 10:35 #4
- Registriert seit
- Sep 2004
- Beiträge
- 8
Vielen Dank für die schnelle Antwort. Wirklich nett
Ich habe folgendes Probiert:
Private Declare Function Test1 Lib "ctctest.dll" ()
Private Sub Form_Load()
Call Test1
End Sub
Dann kam die Fehlermeldung:
DLL-Einsprungpunkt Test1 in ctcdll.dll nicht gefunden.
Die DLL-Datei befindet sich im gleichen Verzeichnis wie das VB-Project
-
Dann ist es so, wie ich es schon vermutet habe: Du must die DLL ein wenig umschreiben und zwar in der Art (wie auch in dem anderen Beitrag):
Code :1 2 3 4
__declspec(dllexport) void __stdcall Test1( void ) { MessageBox ( 0 , "DLL-Aufruf erfolgreich" , "Moin" , MB_OK ) ; }
mfG,
MANGeändert von MAN (13.09.04 um 20:02 Uhr)
BLT - Die Bundesliga Tabelle der Saison 2011 / 2012 - http://www.spacehoster.de/blt/ NEU: mit Tippspiel!
EMail: mstangel@gmx.de
-
15.09.04 12:59 #6
- Registriert seit
- Sep 2004
- Beiträge
- 8
Ich habe es fast geschafft, Bezogen auf die Beispiele unter dem Link:
http://www.mvps.org/EDais/Tutorials/CDLL/CDLLch1a.html
und die Hilfe vom MAN (Super nett und sehr hilfsbereit )habe ich das Beispiel wie folgt verändert:
// VCDLL.cpp : Defines the entry point for the DLL application.
#include "stdafx.h"
#include <string>
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
return TRUE;
}
int _stdcall ReportVersion() {
return 1;
}
//***************************
void _stdcall Test1( void )
{
MessageBox( 0 , "DLL-Aufruf erfolgreich", "Moin", MB_OK ) ;
}
void _stdcall Test2( std::string sMyString )
{
MessageBox( 0 , sMyString.data(), "Moin" , MB_OK ) ;
}
double _stdcall Test3( void )
{
return 1.2345;
}
und in der Datei VCDLL.def habe ich Test1 bis Test3 eingetragen.
In VisualBasic:
Hier habe ich die Vorschläge vom MAN befolgt. Test1 und Test3 Liefen Ohne Probleme. Bei Test2 hat es gehackt. Das Programm stürzte ab (Debug Assertion Failed).
Lieber MAN Du bist echt Klasse. Bitte Um Hilfe.
Danke im VorausGeändert von scherbel_mousa (15.09.04 um 16:23 Uhr)
-
Also hier steht zum Beispiel genau drin, wie du eine DLL in Visual C++ Schritt für Schritt programmierst: http://www.mvps.org/EDais/Tutorials/CDLL/
Ich dachte, dass du schon alles davon programmiert hast, dir nur noch die Schnittstelle fehlt!
Hab mir dein Projekt angekuckt und verbessert. Mustes nur noch kompilieren.
Was ich jetzt vergessen hab: du must noch die .def-Datei aus dem Archiv in dein Proekt einbinden. Einfach bei QuellcodeDateien rechte Maustaste => Datei hinzufügen => CtcConfig.def angeben => Öffnen => neu kompilieren => fertig!
mfG,
MANGeändert von MAN (15.09.04 um 14:09 Uhr)
BLT - Die Bundesliga Tabelle der Saison 2011 / 2012 - http://www.spacehoster.de/blt/ NEU: mit Tippspiel!
EMail: mstangel@gmx.de
-
Benutze einfach statt std:string char*:
Dann müßte es theoretisch gehen (habs nicht ausprobiert)Code :1
__declspec(dllexport) void __stdcall Test2( char* sMyString )
mfG,
MANBLT - Die Bundesliga Tabelle der Saison 2011 / 2012 - http://www.spacehoster.de/blt/ NEU: mit Tippspiel!
EMail: mstangel@gmx.de
-
16.09.04 08:03 #9
- Registriert seit
- Sep 2004
- Beiträge
- 8
Wie Du vorgeschlagen hast, Habe ich die Funk. Test2 wie folgt geändert
//void _stdcall Test2( std::string sMyString )
_declspec(dllexport) void __stdcall Test2( char* sMyString )
{
MessageBox( 0 , sMyString.data(), "Moin" , MB_OK ) ;
}
Somit Kam die die Fehler Meldung:
Der linke Teil von '.data' muss eine Klasse/Struktur/Union sein
dann habe ich .data() die in dem Aufruf von der MessageBox gelöscht und wie folgt geändert.
MessageBox( 0 , sMyString, "Moin" , MB_OK ) ;
Die DLL wurde dann erstellt.
Als ich Test2 von VB aus aufgerufen habe,
Private Declare Function Test2 Lib "vcdll.dll" (ByVal sMyString As String)
...
...
Call Test2("WWW")
kam eine leere MsgBox und zeigte den Folgenden Fehler an:
Falsche DLL-Aufrufkonvention
Was muss ich noch ändern Bitte um HilfeGeändert von scherbel_mousa (16.09.04 um 08:34 Uhr)
-
Dann versuch doch nochmal, das mit dem string in der DLL zu machen, aber ein wenig anders, und zwar so:
Dabei kannst du den Aufruf von VB lassen.Code :1 2 3 4 5 6 7 8
#include <string> [COLOR=red]_[/COLOR]_declspec(dllexport) void __stdcall Test2( char* sMyString ) { std:string sMessage = sMyString; MessageBox( 0 , sMessage.data(), "Moin" , MB_OK ); }
Wenn das nicht funktioniert, wüßt ich auch nicht weiter, da ich das genau so selbst gemacht hatte.
mfG,
MANGeändert von MAN (16.09.04 um 09:09 Uhr)
BLT - Die Bundesliga Tabelle der Saison 2011 / 2012 - http://www.spacehoster.de/blt/ NEU: mit Tippspiel!
EMail: mstangel@gmx.de
-
16.09.04 11:37 #11
- Registriert seit
- Sep 2004
- Beiträge
- 8
Vielen Dank Lieber MAN
Jetzt hat es FUNKTIONIERT, wirklich KLASSE Danke MAN
Den Aufruf in VB musste ich aber auch ändern:
Private Declare Function Test2 Lib "vcdll.dll" (ByVal sMyString As String) As Long
Noch mal möchte ich den MAN loben.
Keiner könnte mir so Hilfen wie Er.
1000000 Dank
-
Ist ja gut
- ich fühl mich geehrt!
Aber nochmal zu dem "As Long": das brauchst du nur, wenn du deine Funktion noch umschreibst und einen Long-Wert zurückgeben läßt. Wenn du die Funktion aus meinem letzten Post nimmst, gibt es ja keinen Rückgabewert.
Aber wenn jetzt alles so läuft wie du es haben wolltest, dann ist ja alles klar!
mfG,
MANBLT - Die Bundesliga Tabelle der Saison 2011 / 2012 - http://www.spacehoster.de/blt/ NEU: mit Tippspiel!
EMail: mstangel@gmx.de
-
16.09.04 12:01 #13
- Registriert seit
- Sep 2004
- Beiträge
- 8
Ich Brauch keine Rückgabewert aber anders hat es nicht funktioniert
Danke noch mal für die tolle Hilfe
-
22.10.07 03:18 #14JapanHauke Tutorials.de Gastzugang
Hallo MAN und scherbel_mousa,
ich stehe vor einem ähnlichen Problem (glaube ich) und würde mich freuen, wenn Ihr mir Eure Testapplikation zuschicken könntet.
Merci!
Hauke
Ähnliche Themen
-
EventHandler per JS anbinden
Von FrankWST im Forum Javascript & AjaxAntworten: 2Letzter Beitrag: 28.08.10, 19:20 -
Wie SQL Server an VB .Net anbinden?
Von thomas38 im Forum .NET Windows FormsAntworten: 12Letzter Beitrag: 20.10.09, 13:24 -
Webservice anbinden
Von kerstel im Forum .NET Web und KommunikationAntworten: 1Letzter Beitrag: 01.06.09, 18:50 -
Datenbank anbinden
Von Crash123 im Forum Java GrundlagenAntworten: 1Letzter Beitrag: 23.04.09, 12:36 -
COM Objekt anbinden
Von Reticent im Forum VisualStudio & MFCAntworten: 2Letzter Beitrag: 19.04.06, 14:35





Zitieren
Login





