2009-07-12 8 views
1

Je veux faire une déclaration d'une fonction externe, mais je ne peux pas le faire.Comment déclarer un pointeur (octet ^)?

Ceci est ma déclaration Delphi, qui ne compile pas.

procedure Encode(input:byte^;output:byte^;size:DWORD);cdecl;external 'blowfish.dll'; 

Ceci est ma déclaration C#, qui fonctionne.

[DllImport("blowfish.dll")] 
public static unsafe extern void Encode(byte* input, byte* output, UInt32 size); 

Mon problème: le compilateur exprects « (» après octet ^, à cause de la^.Si je fais un type mybyte = octet ^, alors comment dois-je appeler la fonction avec le premier élément dans le tableau d'octets - il ne peut donc pas compiler, parce que le type iSNT tableau « de myByte »

+0

Vous pouvez déclarer le C# différent: public static extern vide Encode (octet [] entrée, octet [] sortie, taille UInt32); – Dykam

+0

Que voulez-vous dire? Le paramètre doit être un pointeur, car la fonction modifie la valeur. –

Répondre

5

devrait-il pas d » être ^ avant que les noms de type

procedure Encode(input:^byte;output:^byte;size:DWORD);cdecl;external 'blowfish.dll'; 

, probablement le dll veut aussi des tableaux d'octets au lieu de? pointeurs sur les octets. Donc, vous pourriez vouloir ajuster pour cela aussi. (En C, tableaux un d les pointeurs sont déclarés de la même manière.)

2

Jqno l'a bien compris. De plus, vous pouvez toujours utiliser PByte au lieu de^byte.

+1

@gabr: cela ne devrait-il pas être un commentaire? – Argalatyr

+1

PByte est déclaré dans System, il ne devrait donc pas être nécessaire "d'utiliser" Windows. –

+0

Oups, Allen a raison. (Pour ma défense - J'ai Ctrl-Cliqué sur PByte et Delphi a ouvert l'unité Windows.) D'où mon erreur.) – gabr

1
procedure Encode(CONST input ; VAR output ; size : DWORD); cdecl; external 'blowfish.dll'; 

ou

procedure Encode(input : PByte ; output : PByte ; size : DWORD); cdecl; external 'blowfish.dll'; 

ou

procedure Encode(CONST input ; OUT output ; size : DWORD); cdecl; external 'blowfish.dll'; 

ou

procedure Encode(input : POINTER ; output : POINTER ; size : DWORD); cdecl; external 'blowfish.dll'; 

tout selon la façon dont votre programme Delphi appelle la fonction

Questions connexes