Hallo und guten Tag,
auf COM Objekte zuzugreifen ist ja in AutoIt3 normalerweise die kleinste Übung, aber bei der Übersetzung nachfolgenden Matlab- Codes scheitere ich.
function XYZ = GetXYZCoordinates(filename, point)
%
file = actxserver('PolyFile.PolyFile');
try
file.Open(filename);
measpoints = file.Infos.MeasPoints;
if (point == 0)
XYZ=zeros(measpoints.count,3);
for i=1:measpoints.count
measpoint=measpoints.Item(int32(i));
[X,Y,Z]=measpoint.CoordXYZ();
XYZ(i,:)=[X,Y,Z];
end
else
measpoint=measpoints.Item(int32(point));
[X,Y,Z]=measpoint.CoordXYZ();
XYZ=[X,Y,Z];
end
file.Close();
delete(file);
catch
if file.IsOpen == 1
file.Close();
end
delete(file);
rethrow(lasterror);
end
und zwar an der Stelle [X,Y,Z]=measpoint.CoordXYZ();
Der Basic Header der Methode sieht so aus
Public Sub CoordXYZ( _
ByRef pdX As Double, _
ByRef pdY As Double, _
ByRef pdZ As Double _
)
Das heisst diese Methode erzeugt drei "Double" die mit "BeRef" übergeben werden.
Der erste naive Ansatz das mit dem Autoit "ByRef" zu machen funzt natürlich nicht, aber auch wenn man es mit z.B. mit
Local Const $tagXYZ = "struct;double"
Local $tX = DllStructCreate($tagXYZ)
Local $tY = DllStructCreate($tagXYZ)
Local $tZ = DllStructCreate($tagXYZ)
&
$measpoint.CoordXYZ($tX,$tY,$tZ)
versucht klappt es leider nicht.
Vielen Dank für dioe Aufmerksamkeit & VG
Lutz