Witam,
mam problem z którym siłuje się kilka dni i chyba poległem. Łączę się statycznie z komercyjną dll w celu uzyskania wyników obliczeń. Informacja z oficjalnego helpa do biblioteki:
General information for using the MYDLL DLL with Delphi:
- All the variables must be passed by address (not just the output); for example:
type
T_Chaine10000 = Array[0..10000] of Char;
T_Chaine255 = Array[0..255] of Char;
T_Chaine3 = Array[0..3] of Char;
procedure SET_dll (var i: Integer;
var params: T_Chaine10000 ;
var files: T_Chaine255;
var aaa: T_Chaine3); stdCall;
external 'MYDLL.DLL';
procedure LICZ_dll (var a: Double;
var b: Double;
var c : Double); stdCall;
external 'MYDLL.DLL';
Mam w zasadzie 2 problemy.
Problem 1 - w procedurze LICZ_dll podaje zmienne "a" i "b" a otrzymuje "c". Jeśli chce gdzieś wykorzystać wartość z "c" to dostaje Access Violation. Co ciekawe (może tylko dla mnie) wartości liczą się poprawnie, w c po wyjściu w procedury mam wartość ale każda próba przepisania wartości lub jakiegokolwiek operowania na niej wyrzuca wyjątek.
Problem 2 - W procedure SET_dll w zmiennej files mam pliki konfiguracyjne. Zauważyłem, że program nie zawsze może je poprawnie znaleźć. Ze względu na ograniczenie w ilości znaków nie mogę wpisać tam bezpośredniej ścieżki do plików. Biblioteka dysponuje za to procedurą SETPATCH (path) do podania ścieżki do tych plików. Niestety każde dodanie do programu tej procedury wywala program już na samym początku na "Application.Initialize". Domyślam się, że setpatch może być rozpoznawane jako wewnętrzna procedura delphi która coś miesza (używam delphi 7).
Wydawca biblioteki raczej mi nie pomoże bo nie ma wsparcia dla łączenia z biblioteką - jedynie odnośnie samych obliczeń itp. Biblioteka ma opisane podłączenia dla C++, Matlaba, Excela itd. W Excelu jest nawet arkusz który wykorzystuje bibliotekę i wszystko działa. Dodam, że biblioteka na 90% została skompilowana w Fortranie.
Pierwszy raz napotykam na taki problem. Prosiłbym o pomoc jeśli ktoś spotkał się z czymś podobnym.
zamiana znacznika <code> na <quote>
- @furious programming