abacom
Site Admin
Anmeldungsdatum: 30.06.2006
Beiträge: 898
Verfasst am: 27.03.2007 10:11 Titel: DLL-Import / Programmierbeispiele
--------------------------------------------------------------------------------
Da sich die Programmierung von ProfiLab-DLL-Komponenten steigender Beliebtheit erfreut, wäre es sicherlich wünschenswert Programmierbeispiele für weitere Entwicklungssysteme zu haben. Leider können wir diesem Wunsch angesichts von Preis und Vielfalt der verfügbaren Compiler nur schwer nachkommen. Z.Zt. stehen folgende Programmierbeispiele zur Verfügung:
- Borland Delphi
- Borland C++ Builder
Diese sind Bestandteil der ProfiLab-Installation.
- Microsoft Visual C++ 2005
Beispiel: http://www.abacom-online.de/html/dateie ... al_c++.zip
- DEV C++ (kostenloser Open Source Compiler)
Beispiel: http://www.abacom-online.de/html/dateie ... ev_c++.zip
Compiler-Download: http://www.google.de/search?hl=de&q=Dev+C%2B%2B&meta=
(Vielen Dank Herr Arendt!)
Wir würden uns daher freuen, wenn Anwender die erfolgreich ProfiLab-Dll´s mit anderen Systemen compiliert haben, ihre Source an dieser Stelle zur Verfügung stellen. Entweder indem Sie diese selbst veröffentlichen, oder zur Veröffentlichung an ABACOM senden.
Nach oben
Giesie
Anmeldungsdatum: 05.09.2006
Beiträge: 120
Wohnort: Berlin
Verfasst am: 29.03.2007 07:16 Titel:
--------------------------------------------------------------------------------
Hallo,
eine, so glaube ich, ganz gute Beschreibung zur Erstellung einer DLL mit VB6 ist hier zu finden. http://www.activevb.de/tutorials/tut_ei ... ktdll.html
Ich habe es zwar noch nicht probiert, aber sobald ich mehr Zeit habe werde ich mich mal ran machen. Aber vielleicht ist auch jemand schneller.
_________________
Gutes Gelingen - Giesie -
Nach oben
digilemmi
Anmeldungsdatum: 28.02.2007
Beiträge: 9
Wohnort: Niederösterreich
Verfasst am: 18.04.2007 08:31 Titel:
--------------------------------------------------------------------------------
Hallo Zusammen!
Hat schon jemand eine DLL in C++ (Dev C++) programmiert, bei der auch das Konfigurationsmenü (DLLExport CConfigure) für die Eingabe von Benutzerinformationen (z.B. Variablen) verwendet wurde. Im Counterbeispiel wird hier nur die Meldung über eine MessageBox "Nichts zu konfigurieren" ausgegeben.
Ich würde gerne Variablen über das Konfigurationsmenü in Programmvariablen übergeben!
PS: Ich weiß schon, dass es hier kein C++ Programmierkurs ist, wäre aber über ein Musterbeispiel zum "Anhalten" sehr dankbar.
_________________
Gruß
digilemmi
Nach oben
abacom
Site Admin
Anmeldungsdatum: 30.06.2006
Beiträge: 898
Verfasst am: 18.04.2007 11:03 Titel:
--------------------------------------------------------------------------------
So geht´s in Delphi. In C sieht´s ähnlich aus:
viewtopic.php?t=19&highlight=dll
Zuletzt bearbeitet von abacom am 23.04.2007 13:51, insgesamt einmal bearbeitet
Nach oben
Labmaster
Anmeldungsdatum: 06.06.2007
Beiträge: 2
Verfasst am: 06.06.2007 01:19 Titel: DLL in PowerBasic
--------------------------------------------------------------------------------
Hallo,
ich verwende zwar schon länger ProfiLab (zum Akku vermessen), bin jedoch zumindest als Beitragsschreiber neu hier im Forum.
Damit ich auch einmal etwas beitragen kann, hier mal meine Version für einen ProfiLab DLL, geschrieben für PowerBasic. Speziell wird das wenn es fertig ist die Ansteuerung und Steuerung eines dicken Labor Netzgerätes (10A) als Ladegerät. Hiermit kann ich dann nicht nur Akkus beim Entladen vermessen sondern diese auch gleich automatisch wieder aufladen lassen.
Code:
'Code by Walter M. , Abacom & PowerBasic Inc.
#COMPILE DLL
%USEMACROS = 1
' ** Includes **
#IF NOT %DEF(%WINAPI)
#INCLUDE "WIN32API.INC"
#ENDIF
' ** Constants **
%IDD_DIALOG1 = 101
%IDC_TEXTBOX1 = 1001
%IDC_TEXTBOX2 = 1002
%IDC_TEXTBOX3 = 1003
%IDC_BUTTON1 = 1004
' ** Declarations **
DECLARE CALLBACK FUNCTION ShowDIALOGConfigureProc()
GLOBAL ghInstance AS DWORD
GLOBAL config1() AS STRING
GLOBAL config2() AS STRING
GLOBAL config3() AS STRING
'===============================================================================
' Main DLL entry point called by Windows...
'===============================================================================
' LIBMAIN function Purpose:
'
' User-defined function called by Windows each time a DLL is loaded into,
' and unloaded from, memory. In 32-bit Windows, LibMain is called each
' time a DLL is loaded by an application or process. Your code should
' never call LibMain explicitly.
'
' hInstance is the DLL instance handle. This handle is used by the
' calling application to identify the DLL being called. To access
' resources in the DLL, this handle will need to be stored in a global
' variable. Use the GetModuleHandle(BYVAL 0&) to get the instance
' handle of the calling EXE.
'
' fdwReason specifies a flag indicating why the DLL entry-point
' (LibMain) is being called by Windows.
'
' lpvReserved specifies further aspects of the DLL initialization
' and cleanup. If fdwReason is %DLL_PROCESS_ATTACH, lpvReserved is
' NULL (zero) for dynamic loads and non-NULL for static loads. If
' fdwReason is %DLL_PROCESS_DETACH, lpvReserved is NULL if LibMain
' has been called by using the FreeLibrary API call and non-NULL if
' LibMain has been called during process termination.
'
' Return
' If LibMain is called with %DLL_PROCESS_ATTACH, your LibMain function
' should return a zero (0) if any part of your initialization process
' fails or a one (1) if no errors were encountered. If a zero is
' returned, Windows will abort and unload the DLL from memory. When
' LibMain is called with any other value than %DLL_PROCESS_ATTACH, the
' return value is ignored.
'
'===============================================================================
FUNCTION LIBMAIN (BYVAL hInstance AS LONG, _
BYVAL fwdReason AS LONG, _
BYVAL lpvReserved AS LONG) AS LONG
SELECT CASE fwdReason
CASE %DLL_PROCESS_ATTACH
'Indicates that the DLL is being loaded by another process (a DLL
'or EXE is loading the DLL). DLLs can use this opportunity to
'initialize any instance or global data, such as arrays.
ghInstance = hInstance
DIM config1(100)
DIM config2(100)
DIM config3(100)
FUNCTION = 1 'success!
CASE %DLL_PROCESS_DETACH
'Indicates that the DLL is being unloaded or detached from the
'calling application. DLLs can take this opportunity to clean
'up all resources for all threads attached and known to the DLL.
FUNCTION = 1 'success!
CASE %DLL_THREAD_ATTACH
'Indicates that the DLL is being loaded by a new thread in the
'calling application. DLLs can use this opportunity to
'initialize any thread local storage (TLS).
FUNCTION = 1 'success!
CASE %DLL_THREAD_DETACH
'Indicates that the thread is exiting cleanly. If the DLL has
'allocated any thread local storage, it should be released.
FUNCTION = 1 'success!
END SELECT
END FUNCTION
'===============================================================================
'ProfiLab specific routines
'===============================================================================
' Das Ergebnis dieser Funktion muss einen Bytewert mit der gewünschten Anzahl von Bauteileingängen zurückliefern.
FUNCTION NumInputs SDECL ALIAS "NumInputs" () EXPORT AS BYTE
FUNCTION = 2 ' Anzahl der Eingangs pins
END FUNCTION
'Das Ergebnis dieser Funktion muss einen Bytewert mit der gewünschten Anzahl von Bauteilausgängen zurückliefern.
FUNCTION NumOutputs SDECL ALIAS "NumOutputs" () EXPORT AS BYTE
FUNCTION = 2 ' Anzahl der Ausgangs Pins
END FUNCTION
'Das Ergebnis dieser Funktion muss einen Text für die Beschriftungen jedes Eingangs (Channel) zurückliefern. Das Bauteil ruft diese Funktion für jeden Eingang (Channel) auf und fragt so die Beschriftung für jeden Eingangs-Pin ab. Der Parameter CHANNELS
'gibt an welcher Pin gemeint ist, und läuft von 0 bis NumInputs-1.
SUB GetInputName SDECL ALIAS "GetInputName" (BYVAL Channel AS BYTE, InputName AS ASCIIZ) EXPORT
SELECT CASE Channel
CASE = 0
InputName = "In blue" ' Name für Eingangs Pin 1
CASE = 1
InputName = "In green" ' Name für Eingangs Pin 2
' CASE = 2
' InputName = "In green" ' Name für Eingangs Pin 3
CASE ELSE
InputName = "not defined"
END SELECT
END SUB
'Das Ergebnis dieser Funktion muss einen Text für die Beschriftungen jedes Ausgangs (Channel) zurückliefern. Das Bauteil ruft diese Funktion für jeden Eingang (Channel) auf und fragt so (von oben nach unten) die Beschriftung für jeden Eingangs-Pin ab. Der
'Parameter CHANNELS gibt an welcher Ausgangs-Pin gemeint ist, und läuft von 0 bis NumOutputs-1.
SUB GetOutputName SDECL ALIAS "GetOutputName" (BYVAL Channel AS BYTE, OutputName AS ASCIIZ) EXPORT
SELECT CASE Channel
CASE = 0
OutputName = "Out high" ' Name für Ausgangs Pin 1
CASE = 1
OutputName = "Out medium" ' Name für Ausgangs Pin 2
CASE ELSE
OutputName = "not defined"
END SELECT
END SUB
'Dies ist die zentrale Berechnungsroutine Ihres DLL-Bauteils, die die Funktion des Bauteils definiert. Mit den Parametern PINPUT, POUTPUT und PUSER bekommt die Routine drei Zeigervariablen (Pointer) übergeben die folgende Funktion haben:
SUB CCalculate SDECL ALIAS "CCalculate" (PInput0 AS DOUBLE , POutput0 AS DOUBLE, PUser0 AS DOUBLE) EXPORT
LOCAL PInput AS DOUBLE PTR
LOCAL POutput AS DOUBLE PTR
LOCAL PUser AS DOUBLE PTR
PInput = VARPTR(PInput0)
POutput = VARPTR(POutput0)
PUser = VARPTR(PUser0)
'Berechnung, mal was leichten für den Anfang
@POutput[0] = @PUser[1] * @PInput[0] 'Ausgang1 = Config1 * Eingang1
@POutput[1] = @PUser[2] * @PInput[1] 'Ausgang2 = Config2 * Eingang2
'Todo:
'Hier soll dann die Kommunikation und die steuerung mit dem Thread stattfinden welcher per RS232 mit einem Netzgerät kommuniziert
END SUB
'Diese Routine wird beim Starten eines ProfiLab-Projekt aufgerufen, und kann z.B. benutzt werden, um Anfangswerte Ihrer DLL zu initialisieren. Die Funktion der Parameter wurde zuvor bereits beschrieben.
SUB CSimStart SDECL ALIAS "CSimStart"(PInput0 AS DOUBLE, POutput0 AS DOUBLE, PUser0 AS DOUBLE) EXPORT
LOCAL PInput AS DOUBLE PTR
LOCAL POutput AS DOUBLE PTR
LOCAL PUser AS DOUBLE PTR
PInput = VARPTR(PInput0)
POutput = VARPTR(POutput0)
PUser = VARPTR(PUser0)
'Todo:
'Von hier aus soll ein neuer Thread starten welcher eine RS232 Verbindung zu einem Netzgerät aufbaut
END SUB
'Diese Routine wird beim beenden des RUN-Modus eines ProfiLab-Projekt aufgerufen, und kann z.B. um geöffnete Dateien zu schliessen, etc.. Die Funktion der Parameter wurde zuvor bereits beschrieben.
SUB CSimStop SDECL ALIAS "CSimStop" (PInput0 AS DOUBLE, POutput0 AS DOUBLE, PUser0 AS DOUBLE) EXPORT
LOCAL PInput AS DOUBLE PTR
LOCAL POutput AS DOUBLE PTR
LOCAL PUser AS DOUBLE PTR
PInput = VARPTR(PInput0)
POutput = VARPTR(POutput0)
PUser = VARPTR(PUser0)
'Todo:
'Hier soll die RS232 Verbindung und der Thread wieder geschlossen werden
END SUB
'Sofern Ihre DLL diese Prozedur exportiert, wird die Schaltfläche EINSTELLUNGEN... im Eigenschaftendialog des DLL-Bauteils aktiviert. Wird dann diese Schaltfläche betätigt, so springt ProfiLab die CONFIGURE-Prozedur in Ihrer DLL an. Hier können Sie dann
'z.B. einen eigenen Dialog zum Konfigurieren Ihrer DLL ausführen.
SUB CConfigure SDECL ALIAS "CConfigure" (PUser0 AS DOUBLE) EXPORT
LOCAL lRslt AS LONG
LOCAL hDlg AS DWORD
LOCAL instNr AS LONG
GLOBAL PUser AS DOUBLE PTR
PUser = VARPTR(PUser0)
instNr = INT(@Puser[100])
DIALOG NEW %HWND_DESKTOP, "Please configure", 249, 107, 210, 138, TO hDlg
DIALOG SET USER hDlg, 1, instNr
CONTROL ADD TEXTBOX, hDlg, %IDC_TEXTBOX1, "", 15, 15, 170, 15
CONTROL ADD TEXTBOX, hDlg, %IDC_TEXTBOX2, "", 15, 45, 170, 15
CONTROL ADD TEXTBOX, hDlg, %IDC_TEXTBOX3, "", 15, 75, 170, 15
CONTROL ADD BUTTON, hDlg, %IDC_BUTTON1, "OK", 75, 105, 55, 20
CONTROL SET TEXT hDlg, %IDC_TEXTBOX1, STR$(@Puser[1])
CONTROL SET TEXT hDlg, %IDC_TEXTBOX2, STR$(@Puser[2])
CONTROL SET TEXT hDlg, %IDC_TEXTBOX3, STR$(@Puser[3])
DIALOG SHOW MODAL hDlg, CALL ShowDIALOGConfigureProc TO lRslt
@Puser[1] = VAL(config1(instNr))
@Puser[2] = VAL(config2(instNr))
@Puser[3] = VAL(config3(instNr))
'Todo:
'Der Dialog muß angepasst und erweitert werden, so das z.B. RS232 Schnittstellenparameter und dergleichen angegegben werden können.
END SUB
'------------------------------------------------------------------------------
' ** CallBacks **
'------------------------------------------------------------------------------
CALLBACK FUNCTION ShowDIALOGConfigureProc()
LOCAL instNr AS LONG
LOCAL temp AS STRING
SELECT CASE AS LONG CBMSG
CASE %WM_INITDIALOG
' Initialization handler
CASE %WM_NCACTIVATE
STATIC hWndSaveFocus AS DWORD
IF ISFALSE CBWPARAM THEN
' Save control focus
hWndSaveFocus = GetFocus()
ELSEIF hWndSaveFocus THEN
' Restore control focus
SetFocus(hWndSaveFocus)
hWndSaveFocus = 0
END IF
CASE %WM_COMMAND
' Process control notifications
DIALOG GET USER CBHNDL, 1 TO instNr
SELECT CASE AS LONG CBCTL
CASE %IDC_TEXTBOX1
CASE %IDC_TEXTBOX2
CASE %IDC_TEXTBOX3
CASE %IDC_BUTTON1
IF CBCTLMSG = %BN_CLICKED OR CBCTLMSG = 1 THEN
CONTROL GET TEXT CBHNDL, %IDC_TEXTBOX1 TO config1(instNr)
CONTROL GET TEXT CBHNDL, %IDC_TEXTBOX2 TO config2(instNr)
CONTROL GET TEXT CBHNDL, %IDC_TEXTBOX3 TO config3(instNr)
DIALOG END CBHNDL
END IF
END SELECT
END SELECT
'Todo:
'Es sollen auch ein paar entsprechende Tasten geprüft werden, z.B. die "Enter" Taste
END FUNCTION
Vieleicht hilfts ja dem einen oder anderen weiter.
Wenn ich irgendwann dazu komme, möchte ich das auch noch mal in VisualBasic 6 machen. Hiefür muß man jedoch eine Kleinigkeit mit dem Linker tricksen, so das dieser auch DLL kompilieren kann
Viele Grüße,
Walter
Nach oben
MJB
Anmeldungsdatum: 22.08.2007
Beiträge: 2
Verfasst am: 22.08.2007 14:32 Titel: DLL zur Einbindung neuer HW über RS232, VB oder Delphi
--------------------------------------------------------------------------------
Hallo zusammen. Erster Post und gleich ein Roman
ich habe mir gerade PL besorgt und versuche unsere Messtechnik-HW (www.smmu.info) einzubinden.
Über RS232 Komponente als Makro geht es so halbwegs, aber das Protokoll ist etwas komplex.
Habe Treiber in VBA / Excel vorliegen und würde die am liebsten in DLL packen.
Der Versuch mit VB eine standard DLL zu erstellen (nach Anleitung und Beispiel .. www.vb-helper.com/howto_make_standard_dll.html ) gelang nicht ganz.
Habe das 'COUNTER' DLL-Beispiel in VB übersetzt und mit modifiziertem Linker die DLL erstellt. Aufruf vom VB Testprogramm läuft.
In PL kann ich die DLL einbinden, die exportierten Funktionen werden richtig angezeigt, aber dann stürzt PL kommentarlos ab.
Stimmt wohl was nicht. Weiss aber nicht wie zu debuggen.
Habe auch gelesen, das es nicht gehen soll aus der VB standard Dll dann Dialog aufzumachen, wie er für config benötigt wird.
Hab' mir Delphi 7 besorgt, seh' aber kein Beispiel wie die RS232 einfach anzusprechen ist (so wie VB CommCtl.ocx wäre mir am liebsten)
Gibt es jemanden der:
a) das mit einer VB DLL und PL am laufen hat?
LABMASTER / Walter vielleicht können wir uns zusammentun ?
b) eine Anbindung an RS232 in der VB-DLL hinbekommt?
wenn A geht sollte das auch machbar sein.
c) alternativ RS232 in Delphi als Beispiel hat?
ABACOM: Sie verwenden doch Delphi und RS232 - gibt es da Beispiel / Code-Fragment / Tip ??
d) sonstige Ideen ??
Kann man an Posts hier Dateien ranhängen? Wäre geschickt. Die Forum-SW unterstützt das eigentlich. So erstmal vielen Dank, dass Du überhaupt so weit gelesen hast . Grüße aus Tübingen
Code:
Attribute VB_Name = "Counter_Module"
Public Const DLL_PROCESS_DETACH = 0
Public Const DLL_PROCESS_ATTACH = 1
Public Const DLL_THREAD_ATTACH = 2
Public Const DLL_THREAD_DETACH = 3
' Visual Basic DLL-source (COUNTER.DLL)
' Defines a simple 8-Bit binary counter component for ProfiLab
Const Inputs = 2 ' number of inputs
Const Outputs = 8 ' number of outputs
' INPUTS
Const CLK = 0 ' index of input variable CLK
Const RST = 1 ' index of input variable RST
' OUTPUTS
' USER
Const CLK_old = 0 ' index user variable CLK_old
Const RST_old = 1 ' index user variable RST_old
Const Count = 2 ' index user variable COUNT
Public Function DllMain(hInst As Long, fdwReason As Long, _
lpvReserved As Long) As Boolean
Select Case fdwReason
Case DLL_PROCESS_DETACH
' No per-process cleanup needed
Case DLL_PROCESS_ATTACH
DllMain = True
Case DLL_THREAD_ATTACH
' No per-thread initialization needed
Case DLL_THREAD_DETACH
' No per-thread cleanup needed
End Select
End Function
'Type TDLLParams
' DLLValue(100) As Double 'Type of ProfiLab DLL parameters
'End Type
' PDLLParams = ^TDLLParams ' Pointer to ProfiLab DLL parameters
Function NumInputs() As Byte
'Debug.Print "in Num Inputs"
'MsgBox "in Num Inputs"
NumInputs = Inputs 'Define number of component input pins
End Function
Function NumOutputs() As Byte
'Debug.Print "in Num Outputs"
NumOutputs = Outputs 'Define number of component output pins
End Function
Function InputName(Channel As Byte) As String ' Return name for each component input pin
' Debug.Print "in InputName Channel = ", Channel
Select Case Channel
Case CLK: InputName = StrConv("CLK" & vbNullChar, vbFromUnicode) ' "CLK" (Clock)
Case RST: InputName = StrConv("/RST" & vbNullChar, vbFromUnicode) ' "/RST" (NOT RESET)
End Select
End Function
Function OutputName(Channel As Byte) As String ' Return name for each component output pin
OutputName = StrConv("Q" & Format(Channel) & vbNullChar, vbFromUnicode) '"Q0".."Q7" (Binary count)
End Function
Sub SimStart(PInput() As Double, POutput() As Double, PUser() As Double) 'called when ProfiLab enters RUN mode
Dim i As Integer
'MsgBox "in Sim STart"
PUser(Count) = 0 'RESET COUNTER
For i = 0 To Outputs
POutput(i) = 0 'Set binary outputs with COUNT=0
Next i
End Sub
Sub SimStop(PInput() As Double, POutput() As Double, PUser() As Double) 'called when ProfiLab RUN mode is terminated
' nothing to be done
'MsgBox "in Sim Stop"
End Sub
Sub Calculate(PInput() As Double, POutput() As Double, PUser() As Double) 'called regularly from ProfiLab
Dim i As Integer
Dim tmp As Integer
'MsgBox "in Calculate" & Str(PInput(0)) & " " & Str(POutput(0))
PUser(0) = 5
POutput(0) = PInput(0) + 1
If PInput(RST) <2> 2.5) And Not (PUser(CLK_old) > 2.5) Then 'check out rising edge at CLK input
PUser(Count) = PUser(Count) + 1 ' increase COUNT
If PUser(Count) > 255 Then PUser(Count) = 0 'check overflow
For i = 0 To Outputs
tmp = PUser(Count)
tmp = tmp And 2 ^ i
If tmp > 0 Then
POutput(i) = 5
Else
POutput(i) = 0 'Set binary outputs with current COUNT
End If
Next i
End If
End If
PUser(CLK_old) = PInput(CLK) 'Remember CLK status for next call
End Sub
Nach oben
abacom
Site Admin
Anmeldungsdatum: 30.06.2006
Beiträge: 898
Verfasst am: 03.09.2007 08:35 Titel:
--------------------------------------------------------------------------------
@MJB: Delphi-VCL´s gibt u.a. hier
http://www.torry.net/pages.php?id=198
Für VB sollten Sie die C-Varianten der Procs versuchen, also z.B. CCALCULATE statt CALCULATE, usw.
Nach oben
MJB
Anmeldungsdatum: 22.08.2007
Beiträge: 2
Verfasst am: 19.10.2007 16:07 Titel: DLL_Beispiel mit gemischt STRING & Number Ein-/Ausgängen
--------------------------------------------------------------------------------
Hallo Kollegen und ABACOM,
ich würde gerne eine Komponenten-DLL erstellen,
dabei aber als Ein- und Ausgänge sowohl Zahlen, als auch STRINGS verwenden, wie das auch die Makros können.
In Delphi bin ich noch ganz neu und stecke grade bei den als EXTENDED
definierten Übergabe-Arrays fest.
Wie übergebe ich String-Werte in meine Komponenten-DLL?
Z.B. den Namen eines Kommandos, das dann an mein Gerät geschickt wird.
Und den Antwortstring wieder zurück.
Ein kleines Beispiel wäre schön.
Danke, MJB
Nach oben
Mike D
Anmeldungsdatum: 03.07.2006
Beiträge: 236
Verfasst am: 19.10.2007 17:05 Titel:
--------------------------------------------------------------------------------
Strings in DLLs übergeben geht leider noch nicht, da warte ich auch drauf.
Ich habe es über DDE gelöst. Ein Beispiel stelle ich demnächst ins Netz.
Mike
Nach oben
Step
Anmeldungsdatum: 30.01.2007
Beiträge: 67
Verfasst am: 19.10.2007 18:41 Titel:
--------------------------------------------------------------------------------
Eine andere Möglichkeit (zwar nicht elegant, aber es funktioniert recht zuverlässig) ist das Abspeichern und Einlesen aus einer Datei (wenn man dann in PL einlesen will als ASCII-Datei). Das ist allerdings ein Umweg ... quasi "von hinten durch die Brust ins Auge" ...
@MJB: Falls du EXTENDED-Variablen an PL übergeben willst, solltest du bedenken, dass es sich hierbei um Variablen mit 20 signifikanten Stellen handelt und in PL nur 12 Stellen eingelesen werden ...
Stephan
Nach oben
Giesie
Anmeldungsdatum: 05.09.2006
Beiträge: 120
Wohnort: Berlin
Verfasst am: 19.10.2007 19:37 Titel:
--------------------------------------------------------------------------------
Hallo,
ich habe das mit den Strings und den 20 stelligen EXTENDED-Variablen anders gelöst. Eine DLL mit drei Ausgängen. Ich wandle in der DLL die "Zahlen" und auch Strings in ihre ACII-Werte um. An den Ausgang 1 hänge ich dann einen ASCII2String Wandler dran und danach einen Stingpuffer. Jedesmal wenn ein ASCII-Wert angelegt ist geht der Ausgang 2 auf High. Über den Ausgang 3, der nach vollständiger Ausgabe des Stings auf High geht, werden die Daten aus dem Puffer auf die Anzeige ausgegeben.
Ich hoffe das war verständlich.
_________________
Gutes Gelingen - Giesie -
Nach oben
abacom
Site Admin
Anmeldungsdatum: 30.06.2006
Beiträge: 898
Verfasst am: 12.11.2007 20:42 Titel:
--------------------------------------------------------------------------------
Mit dem Update von heute gibt es nun eine neue CalculateEx - Methode, in der auch Strings verarbeitet werden können. Beispiele in C++ und Delphi befinden sich unter ...\Neue_Funktionen\Strings\DLL\...
Nach oben
Mike D
Anmeldungsdatum: 03.07.2006
Beiträge: 236
Verfasst am: 14.11.2007 22:00 Titel:
--------------------------------------------------------------------------------
Hallo,
ein kleiner Tip für die ersten Versuche mit Strings in DLLs:
Die Namen von Pins, über die Strings geschick werden, MÜSSEN mir $ anfangen!
Function OutputName(Channel: Byte): ShortString; // Return name for each component output pin
begin
// string outputs must be named with leading '$' character!
case Channel of
str_out_1: result:='$_out_1'; //
str_out_2: result:='$_out_2'; //
end;
end;
hatte eine Weile gedauert bis ich den diesbezüglichen Komentar im Beispiel entdeckt hatte.
Mike
Nach oben
abacom
Site Admin
Anmeldungsdatum: 30.06.2006
Beiträge: 898
Verfasst am: 14.11.2007 22:43 Titel:
--------------------------------------------------------------------------------
Der Hinweis kann nicht schaden. Es steht aber auch in der Anleitung:
"Um einen Eingang/Ausgang für Strings zu verwenden muss der zugehörige Pinname mit einem '$'-Zeichen beginnen."
Nach oben
dragon
Anmeldungsdatum: 19.09.2006
Beiträge: 10
Verfasst am: 09.03.2008 11:49 Titel: DLL mit VB
--------------------------------------------------------------------------------
Hallo,
mal eine Frage hat es schon jemand geschafft eine DLL mit VB zu erstellen? Ich bekomm das nicht hin.
Die Funktionen werden übernommen aber dann wird PL einfach geschlossen.
Wenn ich die Funktion GetInputName als SUB deklariere passiert das nicht, es kommt dann aber eine Fehlermeldung.
Für Hilfe wäre ich dankbar
MfG
Dragon
------------------------------------------------------------------------------------
dragon
Anmeldungsdatum: 19.09.2006
Beiträge: 10
Verfasst am: 15.03.2008 19:04 Titel: DLL mit VB6
--------------------------------------------------------------------------------
Hallo,
Habe beide Beschreibungen ausprobiert:
http://www.activevb.de/tutorials/tut_ei ... ktdll.html
www.vb-helper.com/howto_make_standard_dll.html
Funzt aber beides nicht.
Es wird dann wohl nicht mit VB6 gehen.
Danke
Dragon
Nach oben
tlampart
Anmeldungsdatum: 06.02.2008
Beiträge: 20
Wohnort: Hülben
Verfasst am: 19.04.2008 23:22 Titel: DLL unter VB
--------------------------------------------------------------------------------
Mir ergeht es wie so vielenhier, ich bekomme eine DLL einfach nciht hin.
Ich verfüge über VB6 und sonst keine andere Programmiersprache.
Die Beispiel-DLL mit dem Counter ist eigentlich gut verständlich, den auf VB convertierten Quelltext habe ich versucht zu compilieren. geht nicht.
Was mach ich falsch, gibt es eine Anleitung speziell für Profilab udn VB6
danke für Eure Hilfe.
_________________
Sensor People
DLL-Import / Programmierbeispiele
DLL-Import / Programmierbeispiele
Beitrag von abacom » Dienstag 14. Oktober 2008, 13:28
ABACOM support
Zurück zu „DLL-Programmierung“
Gehe zu
- SOFTWARE-UPDATES
- ProfiLab
- ↳ PROFILAB Kundenprojekte und Aufgabenstellungen
- ↳ Einsteigerfragen / FAQ
- ↳ Darstellung / Visualisierung
- ↳ Zählfunktionen, Zeitsteuerung und Programmablauf
- ↳ Messwertverarbeitung
- ↳ STRING-Verarbeitung
- ↳ Datenschnittstellen
- ↳ Hardware-Anbindung, I/O-Schnittstellen
- ↳ (Fern-)Bedienung / Externe Eingabegeräte
- ↳ Plattformen / PC-Systeme
- ↳ Aus- und Weiterbildung
- ↳ Makros & Schaltungen
- ↳ Projekte
- ↳ Heizungssteuerung
- ↳ Ofensteuerung
- ↳ Elektrische Antriebe
- ↳ Wetter und Klima
- ↳ Kraftfahrzeugtechnik
- ↳ Lichttechnik
- ↳ Multimedia
- ↳ Messtechnik
- ↳ Haussteuerungen
- ↳ Modellbau
- ↳ Elektronik und µ-Controller
- ↳ DLL-Programmierung
- ↳ Kundenspezifische Jobangebote rund um ProfiLab
- ↳ PROFILAB SOFTWARE Support
- ↳ Thema: Frontplatte und Frontplattenelemente
- ↳ Thema: Schaltung und Bauteile
- ↳ Thema: Makros
- ↳ Thema: Compiler
- ↳ Thema: Installation, Updates, Plattformen
- ↳ Thema: Geschwindigkeit und Systemauslastung
- ↳ Thema: ProfiLab-WebServer
- ↳ Thema: Anregungen zu ProfiLab
- ↳ PROFILAB HARDWARE Support
- ↳ Thema Hardware-Beispiele / Examples
- ↳ Thema Schaltungsaufbau, EMV, Störungen
- ↳ Thema RS232
- ↳ Thema Modbus
- ↳ Thema Temperatur
- ↳ Thema Relais
- ↳ Thema Multimeter
- ↳ Thema GPIB
- ↳ Thema Portzugriffe und LPT
- ↳ Geräte: ABACOM
- ↳ Geräte: BMCM
- ↳ Geräte: Conrad / Voltcraft
- ↳ Geräte: Deditec
- ↳ Geräte: DLP-Design
- ↳ Geräte: ELV
- ↳ Geräte: Greisinger
- ↳ Geräte: H-Tronic
- ↳ Geräte: Hygrosens
- ↳ Geräte: IO-Warrior
- ↳ Geräte: Kolter Electronic
- ↳ Geräte: LabJack
- ↳ Geräte: Meilhaus
- ↳ Geräte: Quancom
- ↳ Geräte: Velleman
- ↳ Weitere Geräte
- RealView
- ↳ REALVIEW SOFTWARE Support
- ↳ Einsteigerfragen / FAQ
- ↳ Kundenprojekte
- ↳ Anregungen
- ↳ REALVIEW HARDWARE Support
- sPlan
- ↳ SPLAN SOFTWARE Support
- ↳ Thema: Bibliotheken, Bauteile und Symbole
- ↳ Thema: Schaltpläne zeichnen und bearbeiten
- ↳ Thema: Seitenverwaltung, Blätter, Formblätter, Zoom
- ↳ Thema: Import, Export und Drucken
- ↳ Thema: Installation, Versionen, Updates, Plattformen
- ↳ Thema: Anregungen zu sPlan
- ↳ SPLAN SYMBOLE - Tauschbörse
- ↳ sPlan-Symbole: Elektronikbauteile, µ-Controller, Röhren und Halbleiter
- ↳ sPlan-Symbole: Installation und Anlagenbau, SPS
- ↳ sPlan-Symbole: Andere Fachgebiete, Pneumatik, Hydraulik, Kfz, etc.
- ↳ sPlan 8.0 - Demoversion
- Sprint-Layout
- ↳ SPRINT-LAYOUT SOFTWARE Support
- ↳ Einsteigerfragen / FAQ
- ↳ Thema: Platinenherstellung / Fertigungstechnik
- ↳ Thema: Isolationsfräsen und Bohren
- ↳ Thema: Gerberdateien
- ↳ Thema: Makros und Bauteile
- ↳ Thema: Lötaugen, Pads, Leiterbahnen, Masse
- ↳ Thema: Layer, Lötstop, Umriss
- ↳ Thema: Koordinaten und Raster
- ↳ Thema: Import, Export und Drucken
- ↳ Thema: Installation, Versionen, Updates, Plattformen
- ↳ Thema: Anregungen zu Sprint-Layout
- ↳ Kundenprojekte
- LochMaster
- ↳ LOCHMASTER SOFTWARE Support
- ↳ LochMaster - Tauschbörse
- ↳ Einsteigerfragen / FAQ
- ↳ Kundenprojekte
- ↳ Installation, Updates, Plattformen
- ↳ Anregungen
- FrontDesigner
- ↳ FRONTDESIGNER SOFTWARE Support
- ↳ FrontDesigner: Anregungen
- ↳ HPGL-Export, Fräsen und Gravieren
- AudioWave
- ↳ AUDIOWAVE SOFTWARE Support
- ↳ AudioWave: Anregungen
- ... und mehr von www.electronic-software-shop.com
- ↳ Link zum ABACOM - Webshop
- ↳ USB-µPIO / netPIO
- ↳ Fimware /TEMP12
- ↳ Fimware /GPIO18
- ↳ Fimware /INCR3
- ↳ Fimware /FREQ
- ↳ Fimware /PWMIO18
- ↳ USB-ADC Messmodul, 12 Bit
- ↳ USB-LRB Relaiskarte, 8-fach
- ↳ USB-LCD Textdisplay, 4x20
- ↳ Andere Artikel
- Sonstiges
- ↳ Sonstiges