Hallo miteinander,
habe da ein Problem mit dem ich nicht so recht weiterkomme. Folgende Ausgangssituation :
Eine DLL besitzt ein Prozedur welche Daten einem als 'var' übergebenen Record zuweist. Der Record
ist als packed deklartiert und besitzt neben den Datentypen 'Byte' und 'Long' auch den Datentyp 'String'. Alles ist gut, bis zu dem Zeitpunkt an welchem ich versuche den String-Elementen etwas zuzuweisen.
Dann erscheint folgende Fehlermeldung :
Im Projekt xxx.exe ist eine Exception der Klasse EInvalidPointer mit der Meldung "Ungültige Zeigeroperation" aufgetreten !
Dabei ist sowohl in der Projektdatei der DLL als auch in der Unit welche die veröffentlichten Funktionen der DLL enthält die uses-Klausel 'ShareMem' die erste Anweisung.
using ShareMem, ... ;
type TModuleSettings = packed record
Typ : Byte;
Description : string;
PhysUnit : string;
FmtString : string;
Gain : Double;
Offset : Double;
end;
// Hier die betreffende DLL_Funktion
procedure GetModuleSettings (DeviceNum, ModuleNum : Byte; var ModuleSettings : TModuleSettings; var Error : DWORD) ; stdcall;
begin
//
ModuleSettings.Typ := Device[DeviceNum].Module[ModuleNum].Typ;
ModuleSettings.PhysUnit := Device[DeviceNum].Module[ModuleNum].PhysUnit; // << hier tritt der Fehler auf
ModuleSettings.FmtString := Device[DeviceNum].Module[ModuleNum].FmtString;
ModuleSettings.Gain := Device[DeviceNum].Module[ModuleNum].Gain;
ModuleSettings.Offset := Device[DeviceNum].Module[ModuleNum].Offset;
end;
Kommentiere ich die erste Zuweisung eines Strings aus so erfolgt der Fehler in der nächsten Zeile. Das Weglassen der Option 'packed' bringt auch keine Besserung, nur eine etwas anders geartete Fehlermeldung.
Ein weiterer Versuch war, die Stringelemente einzeln (als var) zu übergeben. Auch hier die gleiche Fehlermeldung.
Wer kann helfen ?????
habe da ein Problem mit dem ich nicht so recht weiterkomme. Folgende Ausgangssituation :
Eine DLL besitzt ein Prozedur welche Daten einem als 'var' übergebenen Record zuweist. Der Record
ist als packed deklartiert und besitzt neben den Datentypen 'Byte' und 'Long' auch den Datentyp 'String'. Alles ist gut, bis zu dem Zeitpunkt an welchem ich versuche den String-Elementen etwas zuzuweisen.
Dann erscheint folgende Fehlermeldung :
Im Projekt xxx.exe ist eine Exception der Klasse EInvalidPointer mit der Meldung "Ungültige Zeigeroperation" aufgetreten !
Dabei ist sowohl in der Projektdatei der DLL als auch in der Unit welche die veröffentlichten Funktionen der DLL enthält die uses-Klausel 'ShareMem' die erste Anweisung.
using ShareMem, ... ;
type TModuleSettings = packed record
Typ : Byte;
Description : string;
PhysUnit : string;
FmtString : string;
Gain : Double;
Offset : Double;
end;
// Hier die betreffende DLL_Funktion
procedure GetModuleSettings (DeviceNum, ModuleNum : Byte; var ModuleSettings : TModuleSettings; var Error : DWORD) ; stdcall;
begin
//
ModuleSettings.Typ := Device[DeviceNum].Module[ModuleNum].Typ;
ModuleSettings.PhysUnit := Device[DeviceNum].Module[ModuleNum].PhysUnit; // << hier tritt der Fehler auf
ModuleSettings.FmtString := Device[DeviceNum].Module[ModuleNum].FmtString;
ModuleSettings.Gain := Device[DeviceNum].Module[ModuleNum].Gain;
ModuleSettings.Offset := Device[DeviceNum].Module[ModuleNum].Offset;
end;
Kommentiere ich die erste Zuweisung eines Strings aus so erfolgt der Fehler in der nächsten Zeile. Das Weglassen der Option 'packed' bringt auch keine Besserung, nur eine etwas anders geartete Fehlermeldung.
Ein weiterer Versuch war, die Stringelemente einzeln (als var) zu übergeben. Auch hier die gleiche Fehlermeldung.
Wer kann helfen ?????
Comment