Dll erstellen
-
Hallo!
Ich verwende seit kurzem Devc++.
Ich möchte dort eine dll erstellen (ein Funktionsparser) und diese in vb einbinden.
Wie gehe ich vor und was muss ich beachten!
-
Im Dev-C++ giebt es eine Vorgabe für DLL, über Projekt-neu-DLL, da hast du dann bereits ein Grundgerüst. Nun schaue mal in die FAQ - DLL (in die FAQ sollte man immer als erstes schauen und die Suche verwenden) dort steht einiges weiteres erklärt.
-
komisch - es erscheint immer die Meldung "Kein Hostname angegeben.." mit dem Verweis, dass ich noch Parameter festlegen könne.
Idee?
-
Leider nicht Detailreich genug, bitte mehr aussagen, vor allem was du bisher gemacht hast.
-
Habe mir bei www.activevb.de das "Beispiel zum Erstellen einer C-DLL und Einbinden in Visual Basic" runtergeladen und ausprobiert(die vereinfachte Form in der Readme). Das ist aber für visual c++ geschrieben. Ich habe dann die Vorlage verwendet, den mittleren Teil ("BOOL WINAPI DllEntryPoint...") weggelassen und über den Linker die def Datei eingebaut - ohne Erfolg.
Readme:
Beispiel zum Erstellen einer C-DLL und Einbinden in Visual Basic:1. Öffnen der Visual Studio C++ Umgebung
2. Unter "Datei/Neu" ein neues Projekt anlegen. Es ist der Projekttyp Win32 Dynamic-Link Library (DLL) auszuwählen und den Projektnamen festlegen.
3. Mit "Datei/Neu" ein "C++ Source File" dem Projekt hinzufügen und benennen.
4. Mit "Datei/Neu" ein "Text File" dem Projekt hinzufügen und benennen. Achtung die Endung der neu eingefügten Textdatei muß auf jeden Fall in *.DEF geändert werden!!!
5. Den folgenden Code in das "C++ Source File" einfügen:
//------------------------------------------------------------------------
#include <windows.h>signed long _stdcall StdVar_Byte (unsigned char ByValValue, unsigned char *ByRefValue);
//------------------------------------------------------------------------
// Die folgende Funktion unverändert belassenBOOL WINAPI DllEntryPoint ( HINSTANCE hDLL, DWORD dwREASON, LPVOID Reserved )
{
switch (dwREASON)
{
case DLL_PROCESS_ATTACH: { break; }
case DLL_PROCESS_DETACH: { break; }
}
return TRUE;
}//------------------------------------------------------------------------
signed long _stdcall StdVar_Byte (unsigned char ByValValue, char *ByRefValue)
{
ByValValue++;
*ByRefValue = *ByRefValue + 2;
return (ByValValue);
}//------------------------------------------------------------------------
6. Folgenden Text in die *.def Datei einfügen (test_dll ist in den aktuellen Dll-Namen zu ändern):
;------------------------------------------------------------------------
LIBRARY test_dllCODE PRELOAD MOVEABLE DISCARDABLE
DATA PRELOAD SINGLEEXPORTS
StdVar_Byte @1
;------------------------------------------------------------------------7. Alles abspeichern
8. Unter "Erstellen/aktive Konfiguration festlegen" - mydll WIN32 RELEASE auswählen (bei DEBUG wird Dll im Debug-Ordner des Verzeichnisses MYDLL angelegt)
9. Unter Erstellen erstmal Quellcodedatei kompilieren.
10. Wenn keine Fehler auftreten, mit "Alles Neu erstellen" Dll erstellen. Die kompilierte Dll muß entweder ins Windows-System-Verzeichnis kopiert werden oder mit dem absoluten Pfad später in VB eingebunden werden.
11. Einbinden in Visual Basic: Folgenden Code in ein Formular oder Modul einkopieren:
Option ExplicitPrivate Declare Function StdVar_Byte Lib "test_dll.dll" (ByVal ByValValue As Byte, ByRef ByRefValue As Byte) As Long
12. Der Aufruf erfolgt wie bei den bekannten APIs: StdVar_ByValByte = StdVar_Byte(StdVar_ByValByte, StdVar_ByRefByte)
ACHTUNG: Datentypen besitzen in C++ und VB nicht zwingend die selbe Länge!!
MS C++ 6.0 | VB 6.0 | Länge
-------------------------------------------------------
short | int | 2 Byte
int | long | 4 Byte
long | long | 4 Byte
double | double | 8 Byte
-
in der neuen Dev-C++ Version kannst du VC++ Projekte Importieren, ist zwar noch nicht so gut umgesetzt aber klappt zum teil schon gut.
Die primare Frage ist aber wie gut kennst du dich schon mit DLL aus, vermutlich wenig, denn es reicht wenn du eine Vollwertige DLL erstellst, so wie Windows damit klarkommt, egal unter welcher sprache und diese dann in dein VB projekt ladest.