mam dll która zawsze była kompilowana jako 32bitowa
Teraz próbuję ją uruchomić na 64 bit.
I co ciekawe.
Jak uruchamiam dll z mojego exeka z Dephi (x64) to program wylicza w takim jednym miejscy wskaźniki 32bitowe.a jak uruchamiam z exeka kompilowanego w .NET (też x64) to w tym samym miejscu już mam adresy 64bitowe
wcześniej było tak:
PValTablesInfo = ^TValTablesInfo;
TValTablesInfo = packed record
Addr1,Addr2:Pointer;
Size:integer;
DynArr:boolean;
end;
New(x);
x^.Addr1:=Addr1;
x^.Addr2:=Addr2;
x^.Size:=Round(Size/4);
x^.DynArr:=DynArr;
dataset.FieldByName(FieldName).Tag:=Integer(x);
Generalnie do pola w datasecie podłączam sobie jakiś rekord którego później gdzieś używam na zamknięciu tego dataseta było tak:
for i:=0 to dataset.FieldCount-1 do
if (dataset.Fields[i].Tag<>0) then
begin
x:=Ptr(dataset.Fields[i].Tag);
Dispose(x);
dataset.Fields[i].Tag:=0;
end;
I to zawsze działało.
natomiast teraz jak przerabiam to na wersję x64 to zamieniłem linię
dataset.FieldByName(FieldName).Tag:=Integer(x);
na
dataset.FieldByName(FieldName).Tag:=Int64(x);
później wysypywał się na
x:=Ptr(dataset.Fields[i].Tag)
więc zmieniłem na
x:=Addr(dataset.Fields[i].Tag);
i tu wszystko wydaje się ok, ale niestety na Dispose(x) wywala Invalid Pointer Operation.
Nie wiem dlaczego.
Poradzicie coś?