Server
05-09-2006, 20:59
Прошу помочь знающих людей, бо сам уже оскомиму набил-таки...
Значит имеется программа написанная на Delphi 7. В ней вызывается dll, следующим образом:
--------------------------------------------------
var
PlugExec:function(I,R,S,B:pointer;ISize,RSize,SSize,BSize:integer):boolean;
IntMas:array[0..72] of ^integer;
RealMas:array[0..4] of ^real;
StrMas:array[0..29] of ^shortstring;
BoolMas:array[0..4] of ^boolean;
begin
@PlugExec:=nil;
NewHandle:=LoadLibrary('C++Plugin.dll'));
if NewHandle <> 0 then begin
@PlugExec:=GetProcAddress(NewHandle,'PluginExec');
PlugExec(@IntMas,@RealMas,@StrMas,@BoolMas,length(IntMas),length(RealMas),length(StrMas),length(Bool Mas));
end;
FreeLibrary(NewHandle);
--------------------------------------------------
Теперь код С++ dll-ки (.NET):
--------------------------------------------------
extern "C" bool PASCAL EXPORT PluginExec(void *I, void *R, void *S, void *B, int ISize, int RSize, int SSize, int BSize){
int *IntMas;
IntMas=new int[ISize];
IntMas=dynamic_cast<int 32*>(I);
if (IntMas[5]==4)
...
return true; }
--------------------------------------------------
В результате выскакивает следуюзая ошибка в строке с dynamic_cast:
error C2059: syntax error : 'constant'
1. В чем проблема? Объявить const void *I - та же проблема.
2. Если из Delphi в ISize сидит к примеру 40, то в С++ я виду 1200000 или что-то в этом роде.
3. Адрес ячейки памяти I указывает на 0х000005 чего-то так, то есть область ОС. Указатели без типа несовместимы?
Заранее благодарен, за любую предоставленную информацию.
Значит имеется программа написанная на Delphi 7. В ней вызывается dll, следующим образом:
--------------------------------------------------
var
PlugExec:function(I,R,S,B:pointer;ISize,RSize,SSize,BSize:integer):boolean;
IntMas:array[0..72] of ^integer;
RealMas:array[0..4] of ^real;
StrMas:array[0..29] of ^shortstring;
BoolMas:array[0..4] of ^boolean;
begin
@PlugExec:=nil;
NewHandle:=LoadLibrary('C++Plugin.dll'));
if NewHandle <> 0 then begin
@PlugExec:=GetProcAddress(NewHandle,'PluginExec');
PlugExec(@IntMas,@RealMas,@StrMas,@BoolMas,length(IntMas),length(RealMas),length(StrMas),length(Bool Mas));
end;
FreeLibrary(NewHandle);
--------------------------------------------------
Теперь код С++ dll-ки (.NET):
--------------------------------------------------
extern "C" bool PASCAL EXPORT PluginExec(void *I, void *R, void *S, void *B, int ISize, int RSize, int SSize, int BSize){
int *IntMas;
IntMas=new int[ISize];
IntMas=dynamic_cast<int 32*>(I);
if (IntMas[5]==4)
...
return true; }
--------------------------------------------------
В результате выскакивает следуюзая ошибка в строке с dynamic_cast:
error C2059: syntax error : 'constant'
1. В чем проблема? Объявить const void *I - та же проблема.
2. Если из Delphi в ISize сидит к примеру 40, то в С++ я виду 1200000 или что-то в этом роде.
3. Адрес ячейки памяти I указывает на 0х000005 чего-то так, то есть область ОС. Указатели без типа несовместимы?
Заранее благодарен, за любую предоставленную информацию.