Показать сообщение отдельно
  #4  
Старый 03.07.2009, 15:45
smirnoff843 smirnoff843 вне форума
Прохожий
 
Регистрация: 03.07.2009
Сообщения: 5
Репутация: 10
Сообщение

Вот для наглядности код DLL:

Код:
#include <vcl.h>
#include <windows.h>
#pragma hdrstop

#pragma argsused
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
	return 1;
}
//---------------------------------------------------------------------------
extern "C" bool __declspec( dllexport ) func1(unsigned char *input, unsigned char *output);
extern "C" void __declspec( dllexport ) test();

bool func1(unsigned char *input, unsigned char *output)
{
ShowMessage((char *)input);
input = output;
}

void test()
{
unsigned char *input = "test";
func1(input,input);
}

Обращение из Delphi:

Код:
function func1(input: pointer; output: pointer): bool; cdecl;
external 'my.dll' name '_func1';
procedure test(); cdecl;
external 'my.dll' name '_test';

procedure TForm1.Button1Click(Sender: TObject);
var
  i :integer;
  s : string;
  a: array[0..30000] of char;
  b: ^uchar;

  a2: array[0..60000] of uchar;
  b2: ^uchar;
begin
StrCopy(a, '123456');
test();   //проверка вызова func1 внутри dll
b := @a;
b2 := @a2;
func1(@a,@a2); //вызов func1 из dll
end;

При вызове func1(@a,@a2); видим только символ "1", нужно вывести все содержимое массива.
Ответить с цитированием