2009-07-12 4 views
1

Я хочу сделать заявление о внешней функции, но я не могу этого сделать.Как объявить указатель (byte ^)?

Это моя декларация 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# different: public static extern void Encode (byte [] input, byte [] output, UInt32 size); – Dykam

+0

Что значит? Параметр должен быть указателем, потому что функция меняет значение. –

ответ

5

не следует ли ^ «s быть перед именами типа

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

Кроме того, вероятно, длл хочет массивы байтов вместо? указатели на байты. Таким образом, вы можете настроить и для этого. (В C массивы d указываются одинаково.)

2

Jqno получил это право. Кроме того, вы всегда можете использовать PByte вместо^байта.

+1

@gabr: разве это не комментарий? – Argalatyr

+1

PByte объявляется в системе, поэтому не нужно «использовать» Windows. –

+0

Ooops, Аллен верен. (В моей защите - я нажал Ctrl-на PByte и Delphi открыл блок Windows. Отсюда моя ошибка.) – gabr

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 вызывает функцию