Bruke funksjonene ANROP og REGISTRER
Noe av innholdet i dette emnet gjelder kanskje ikke alle språk.
Forsiktig! Ugyldig redigering av registret kan gjøre alvorlige skader på operativsystemet, noe som kan føre til at du må installere det på nytt. Microsoft kan ikke garantere at problemer som oppstår på grunn av ugyldig redigering av registret, kan løses. Før du redigerer registret, må du sikkerhetskopiere verdifulle data. Hvis du vil ha den seneste informasjonen om hvordan du bruker og beskytter datamaskinens register, se Hjelp for Microsoft Windows.
Nedenfor gis en nærmere beskrivelse av datatypene for argumenter og resultatverdier for funksjonene ANROP, REGISTRER og REGISTRER.ID. Argumenter og resultatverdier varierer noe på grunn av operativmiljøet. Disse ulikhetene går frem av tabellen over datatyper.
Datatyper
I funksjonene ANROP, REGISTRER og REGISTRER.ID angir argumentet type datatypen for resultatverdien og for alle argumentene til DLL-funksjonen eller koderessursen. Det første tegnet i argumentet type angir datatypen til resultatverdien. Resten av tegnene viser datatypene for alle argumentene. En DLL-funksjon som for eksempel gir et flyttall som resultat og tar et heltall og et flyttall som argumenter, vil kreve tegnene "BIB" som argumentet type.
Tabellen nedenfor viser en fullstendig liste over de datatypekodene Microsoft Excel gjenkjenner, en beskrivelse av hver enkelt datatype, hvordan argumentet eller resultatverdien blir sendt videre og en typisk deklarasjon for tilsvarende datatype i programmeringsspråket C.
Kode | Beskrivelse | Sendes som | C-deklarasjon |
---|---|---|---|
A | Logisk (USANN = 0), SANN = 1) |
Verdi | short int |
B | IEEE 8-byte flyttall | Verdi (Windows) Referanse (Macintosh) |
double (Windows) double * (Macintosh) |
C | Null-terminert streng (maks. lengde = 255 tegn) | Referanse | char * |
D | Byte-talt streng (første byte inneholder lengden på strengen, maks. lengde = 255 tegn) | Referanse | Unsigned char * |
E | IEEE 8-byte flyttall | Referanse | double * |
F | Null-terminert streng (maks. lengde = 255 tegn) | Referanse (endres på stedet) | char * |
G | Byte-talt streng (første byte inneholder lengden på strengen, maks. lengde = 255 tegn) | Referanse (endres på stedet) | unsigned char * |
H | 2-byte heltall uten fortegn | Verdi | unsigned short int |
I | 2-byte heltall med fortegn | Verdi | short int |
J | 4-byte heltall med fortegn | Verdi | long int |
N | Matrise | Referanse | FP * |
L | Logisk (USANN = 0, SANN = 1) |
Referanse | short int * |
M | 2-byte heltall med fortegn | Referanse | short int * |
N | 4-byte heltall med fortegn | Referanse | long int * |
O | Matrise | Referanse | Tre argumenter blir sendt: unsigned short int * unsigned short int * double [ ] |
P | Microsoft Excels datastruktur OPER | Referanse | OPER * |
R | Microsoft Excels datastruktur XLOPER | Referanse | XLOPER * |
Kommentarer
- Deklarasjonene i programmeringsspråket C forutsetter at din kompilator har standardverdiene 8-byte double, 2-byte short int og 4-byte long int.
- I programmeringsmiljøet i Microsoft Windows er alle pekere lik fjernpekere. Du må for eksempel deklarere datatypekode D som
unsigned char far
* i Microsoft Windows. - Alle funksjoner i dynamiske koblingsbiblioteker og koderessurser kalles ved hjelp av anropskonvensjonene i Pascal. De fleste C-kompilatorer tillater at du bruker Pascals anropskonvensjoner ved at du føyer nøkkelordet pascal til deklarasjonen av funksjonen, slik det er vist i eksemplet nedenfor:
pascal void main (int rader, int kolonner, int a)
- Hvis en funksjon bruker en datatype overført ved referanse, som returverdi, kan du angi en nullpeker som returverdi. Microsoft Excel vil tolke nullpekeren som feilverdien #NUM!.
Tilleggsinformasjon om datatyper
Dette avsnittet inneholder mer detaljert informasjon om datatypene F, G, K, O, P og R samt annen informasjon om argumentet type.
Datatypene F og G
Med datatypene F og G kan en funksjon endre en strengbuffer som er tilordnet av Microsoft Excel. Hvis typekoden til resultatverdien er lik F eller G, vil Microsoft Excel overse verdien som funksjonen returnerer. I stedet vil Microsoft Excel søke i listen over funksjonsargumenter etter den tilsvarende datatypen (F eller G), og deretter ta gjeldende innhold i den tilordnede strengbufferen som returverdi. Microsoft Excel allokerer 256 byte for argumentet, slik at funksjonen kan returnere en lengre streng enn den mottok.
Datatypen K
Datatypen K bruker en peker til en FP-struktur med variabel størrelse. Du bør definere denne strukturen i DLL-en eller koderessursen slik:
typedef struct _FP
{
unsigned short int rows;
unsigned short int columns;
double array[1]; /* Actually, array[rows][columns] */
} FP;
Deklarasjonen dobbel matrise[1]
tilordner bare lagerplass for en matrise med ett element. Antallet elementer i den faktiske matrisen er lik antallet rader multiplisert med antallet kolonner.
Datatypen O
Datatypen O kan bare brukes som argument, ikke som returverdi. Den videresender tre elementer: En peker til antallet rader i en matrise, en peker til antallet kolonner i en matrise og en peker til en todimensjonal matrise med flyttall.
I stedet for å returnere en verdi, kan en funksjon endre en matrise som er oversendt av datatypen O. Du kan gjøre dette ved å bruke ">O" som argumentet type. Hvis du vil ha mer informasjon om dette, se avsnittet "Funksjoner som foretar endringer på stedet og er deklarert som "void" nedenfor i dette tillegget.
Datatypen O ble laget for å sikre direkte kompatibilitet med dynamiske koblingsbiblioteker i FORTRAN, som videresender argumenter ved hjelp av referanser.
Datatypen P
Datatypen P er en peker til en OPER-struktur. OPER-strukturen inneholder åtte byte med data, fulgt av et kjennemerke på to byte som angir datatypen. Med datatypen P kan en DLL-funksjon eller koderessurs ta imot og gi som resultat hvilken som helst av Microsoft Excels datatyper.
OPER-strukturen defineres slik:
typedef struct _oper
{
union
{
double num;
unsigned char *str;
unsigned short int bool;
unsigned short int err;
struct
{
struct _oper *lparray;
unsigned short int rows;
unsigned short int columns;
} array;
} val;
unsigned short int type;
} OPER;
Feltet type inneholder en av disse verdiene.
Type | Beskrivelse | Verdi-felt som brukes |
---|---|---|
1 | Numerisk | tall |
2 | Streng (første byte inneholder lengden på strengen) | streng |
4 | Boolsk (logisk) | boolsk |
16 | Feil. Feilverdiene er:
0#NULL! 7#DIV/0! 15#Verdi! 23#REF! 29#NAVN? 36#NUM! 42#I/T |
feil |
64 | Matrise | matrise |
128 | Manglende argument | |
256 | Tom celle |
De to siste verdiene kan bare brukes som argumenter, ikke som returverdier. Verdien for manglende argument (128) blir oversendt når anroperen utelater et argument. Verdien for tom celle (256) blir oversendt når anroperen sender en referanse til en tom celle.
Datatypen R—Anrop Av Funksjoner I Microsoft Excel Fra Dynamiske Koblingsbiblioteker (DLL)
Datatypen R er en peker til en XLOPER-struktur, som er en forbedret versjon av OPER-strukturen. I Microsoft Excel versjon 4.0 eller senere kan du bruke datatypen R til å lage dynamiske koblingsbiblioteker og koderessurser som anroper funksjoner i Microsoft Excel. Med XLOPER-strukturen kan en DLL-funksjon oversende arkreferanser, sette i verk flytkontroll og oversende data. Det vil bli for langt å gi en fullstendig beskrivelse av datatypen R og grensesnittet for programmering i Microsoft Excel (API = Application Programming Interface) i dette emnet, men Microsoft Office XP Developer's Guide inneholder detaljert informasjon om datatypen R, Microsoft Excel API og mange andre tekniske sider ved Microsoft Excel.
Flyktige funksjoner og omberegning
Microsoft Excel vil normalt bare beregne en DLL-funksjon (eller en koderessurs) når den settes inn i en celle, når en av dens overordnede verdier endres eller når cellen blir beregnet i en makro. I et regneark kan du gjøre en DLL-funksjon eller koderessurs flyktig, noe som betyr at den blir regnet om hver gang regnearket blir regnet om. Du gjør en funksjon flyktig ved å føye til et utropstegn (!) som det siste tegnet i argumentet type.
Følgende regnearkformel vil for eksempel bli omberegnet hver gang regnearket blir omberegnet i Microsoft Excel for Windows:
CALL("Kernel32","GetTickCount","J!")
Funksjoner som foretar endringer på stedet og er deklarert "Void"
Du kan bruke et enkelt siffer n som returtypekode for argumentet type, der n er et tall fra 1 til 9. Dette forteller Microsoft Excel at programmet skal endre variabelen i den posisjonen som det n-te argumentet i type peker på, i stedet for å returnere en verdi. Dette kalles også å endre på stedet. Det n-te argumentet må være en datatype som overføres ved referanse (C, D, E, F, G, K, L, M, N, O, P eller R). DLL-funksjonen eller koderessursen må også deklareres med nøkkelordet void i programmeringsspråket C (eller nøkkelordet procedure i Pascal).
En DLL-funksjon som tar en null-terminert streng og to pekere til heltall som argumenter, kan endre strengen på stedet. Bruk "1FMM" som argumentet type og deklarer funksjonen som "void".
I tidligere Microsoft Excel-versjoner enn 4.0 ble tegnet > brukt til å endre det første argumentet på stedet. Det fantes ingen måte å endre andre argumenter enn det første argumentet på. Tegnet > svarer til n=1 i Microsoft Excel 4.0 og senere versjoner.