-> Hier kostenlos registrieren
Ich möchte eine ActiveX-Dll erstellen, so dass man in WinCC-Flexible per VBScript darauf zugreifen kann.
Eine normale DLL mit Lazarus ist kein Problem (leider kann man die in VBS aber nicht einbinden, deshalb die ActiveX, welche eine Klasse zur Verfügen stellen soll, die dann
entsprechende Funktionen ausführt.
Hier mal mein Code um ein Bit aus einem DWORD zu lesen bzw. ein Bit zu setzen. Ohne den Export-Abschnitt wird es schon mal fehlrfrei kompliert.
Der Export einer Klasse funktioniert natürlich so nicht. Leider hab ich keine Ahnung wie und ob man das mit Pascal hinbekommt. Ich hab schon mehrere Stunden
gegoogelt aber man findet weder wie man ActiveX-DLL in Delphi erstellt noch in Lazarus.
D.h. für mich: entwerder es ist total simpel oder es geht nicht!
WER weis was dazu?
Eine normale DLL mit Lazarus ist kein Problem (leider kann man die in VBS aber nicht einbinden, deshalb die ActiveX, welche eine Klasse zur Verfügen stellen soll, die dann
entsprechende Funktionen ausführt.
Hier mal mein Code um ein Bit aus einem DWORD zu lesen bzw. ein Bit zu setzen. Ohne den Export-Abschnitt wird es schon mal fehlrfrei kompliert.
Der Export einer Klasse funktioniert natürlich so nicht. Leider hab ich keine Ahnung wie und ob man das mit Pascal hinbekommt. Ich hab schon mehrere Stunden
gegoogelt aber man findet weder wie man ActiveX-DLL in Delphi erstellt noch in Lazarus.
D.h. für mich: entwerder es ist total simpel oder es geht nicht!
WER weis was dazu?
Code:
library VbsExt;
// Provides methods to manipulate Bits in VB-Script
{$mode objfpc}{$H+}
uses
Classes, Windows;
TYPE
VbsBitLogic = class
public
constructor Create;
Function GetBit (Value:DWORD; NoOfBit:Smallint): WordBool; stdcall;
Function SetBit(Value:DWORD; NoOfBit:Smallint; BitValue: WordBool):DWORD; stdcall;
end;
constructor VbsBitLogic.Create;
begin
inherited Create;
end;
function VbsBitLogic.GetBit(Value:DWORD; NoOfBit:Smallint): WordBool; stdcall;
Begin
// WordBool erzeugt in Pascal 0=FALSE; &FFFF=TRUE, was in VB (-1) ist
// ist nötig, da VB 16Bit Bool verwendet
GetBit := ((1 SHL NoOfBit) AND VALUE) <> 0;
end;
Function VbsBitLogic.SetBit(Value:DWORD; NoOfBit:Smallint; BitValue:WordBool):DWORD; stdcall;
// var in PACAL is same as ByRef in VB, so VB has to pass it's Variable ByRef
BEGIN
IF BitValue THEN BEGIN
SetBit := (1 SHL NoOfBit) OR Value;
END
ELSE BEGIN
SetBit := (NOT (1 SHL NoOfBit)) AND Value;
END;
end;
exports
VbsBitLogic;
end.