Avatar billede trer Nybegynder
09. november 2004 - 19:39 Der er 3 kommentarer og
1 løsning

SafeArray i D6

Hej

Er ved at skrive et COM objekt hvor en af objektets properties skal være et safearray som jeg kan anvende fra VBS script filer a la

dim a(100), myobject
set myobject = createobject("mydll.myobject")
a = myobject.myproperty

Nogen der kan komme med et simpelt eksempel på hvordan et safearray opbygges i D6?

Mvh
Troels
Avatar billede martinlind Nybegynder
09. november 2004 - 22:02 #1
fra hjælpen :

COM requires that arrays be passed via a special data type known as a SafeArray. You can create and destroy SafeArrays by calling special COM functions to do so, and all elements within a SafeArray must be valid automation-compatible types. The Delphi compiler has built-in knowledge of COM SafeArrays and automatically calls the COM API to create, copy, and destroy SafeArrays.

In the Type Library editor, a SafeArray must specify the type of its elements. For example, the following line from the text page declares a method with a parameter that is a SafeArray with an element type of Integer:

procedure HighLightLines(Lines: SafeArray of Integer);

Note

Although you must specify the element type when declaring a SafeArray type in the Type Library editor, the declaration in the generated _TLB unit does not indicate the element type.
Avatar billede trer Nybegynder
09. november 2004 - 22:17 #2
Hjælpefilen har jeg naturligvis haft checket og også fundet ovenstående pasus. Og den er ikke særlig brugbar i forhold til at tilføje elementer til det safearray som returneres fra en funktion a la nedenfor:

function TMyObject.MyProperty: PSafeArray;
begin
  // ?!?
end;

Jeg har fundet frem til funktionen SafeArrayPutElement() men umiddelbart har jeg ikke haft heldet med mig til at anvende den - i hvert fald kan jeg ikke se array'ets data i et test-vb script omend mit COM objekt ikke fejler ved kompilering eller anvendelse...

Så derfor søger jeg et eksempel på hvordan man gør...
Avatar billede martinlind Nybegynder
10. november 2004 - 16:43 #3
ok, det har jeg ikke lige :(
Avatar billede trer Nybegynder
15. november 2004 - 09:40 #4
Har selv løst det.  Viser sig at man kan anvende VarArrayCreate() fra variants.pas.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester