Angenommen ich einen C-Code haben (dcomplex.h):Wie verwenden Sie eine feste Größe C-Array-Typ in Vala?
typedef double dcomplex[2];
und wollen einen solchen Datentyp in Vala verwenden. Was kann die minimale VAPI-Datei und Vala Anruf dafür sein?
(Das ultimative Ziel ist es, die C99 complex.h Typen zu verwenden.)
ich viele Varianten der folgenden dcomplex.vapi Datei versucht:
[CCode (cheader_filename = "dcomplex.h")]
namespace DComplex {
[SimpleType]
[CCode (cname = "dcomplex", has_type_id = false)]
public struct DoubleComplex {
}
}
und Verwendung in vala Code wie:
using DComplex;
void main()
{
DoubleComplex x = {1.0, 2.0};
stdout.printf("x = %f + i %f\n", x[0], x[1]);
}
Die Compilation
valac --vapidir . --pkg dcomplex test.vala
führt zu Fehlern:
error: too many expressions in initializer list for `Complex.DoubleComplex'
DoubleComplex x = {1.0, 2.0};
^^^
error: The expression `Complex.DoubleComplex' does not denote an array
stdout.printf("x = %f + i %f\n", x[0], x[1]);
^^^^
DoubleComplex x = {1,0, 2,0}; - kann dieser Typ sein: "DoubleComplex" ist eine Struktur, nicht ein Array von 2 Elementen? –
Das ist natürlich die richtige Beobachtung. Ein solches Verhalten ist etwas zu erwarten. Die Frage ist, was zu verwenden ist, damit es irgendwie funktioniert. Der vala vapi doc sagt zum Beispiel auch 'public struct Sth: double {}'. Aber ich kann es nicht für Arrays wie 'public struct DoubleComplex: double [2] {}' verwenden. –