2009-07-12 96 views
1

我想做一個外部函數的聲明,但我做不到。如何聲明一個指針(字節^)?

這是我的Delphi聲明,它不能編譯。

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

這是我的C#聲明,它的工作原理。

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

我的問題:編譯器exprects「(」 ^因爲^。如果的,字節之後使一個類型mybyte =字節^;然後我怎樣調用與字節數組中的第一構件的功能 - 這則不能編譯,因爲數組心不是類型「myByte」

+0

你可能想聲明C#不同:public static extern void Encode(byte [] input,byte [] output,UInt32 size); – Dykam 2009-07-12 14:43:29

+0

你是什麼意思?該參數必須是一個指針,因爲該函數會更改該值。 – 2009-07-12 14:44:37

回答

5

不應該^的是類型名稱前

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

而且,可能是DLL想要的字節數組來代替?指向字節的指針,所以你可能也想調整它。(在C中,數組和an d指針是以相同的方式聲明的。)

2

Jqno說得沒錯。另外你總是可以使用PByte而不是^字節。

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

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

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

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

完全取決於你的Delphi程序是如何調用該函數