FTDI w Delphi 6 i XE

0

Witajcie,
Spotkałem się z problemem, z którym nie mogę sobie w żaden sposób poradzić. Chodzi o obsługę układu FTDI (konwerter USB-RS). Mam stworzone oprogramowanie pod Delphi 6 i działa bez najmniejszych problemów. Schody zaczęły się po przesiadce na Delphi XE. Ten sam kod nie działa po skompilowaniu.
Chodzi mi głównie o funkcję FT_OpenEx('urzadzenie', 2, uchwyt);
Gdy wszystko jest ok powinna zwrócić wartość 0 i tak też jest w Delphi 6 w XE zwraca 2 (brak urządzenia). Sterowniki najnowsze ściagnięte ze strony producenta. Poza różnicą wersji Delphi zmienił się też system z XP na windows7 x64.
proszę o wszelkie sugestie co może być przyczyną tak dziwnego zachowania...
Z góry dziekuję

0

zmienił się też system z XP na windows7 x64

Może właśnie to ?
Próbowałeś XE na Windows XP

0

Nie wiem dlatego pytam, ale dziękuję za jakąś nową koncepcję i na pewno będę próbować, dam znać czy coś się udało

0

Sprawdzone i niestety problem nadal istnieje. Dokładnie ten sam program uruchomiony na tym samym komputerze w Delphi 6 działa a w XE już nie... :( Spróbuję napisać maila do producenta FTDI bo problem jest albo w sterownikach, bibliotekach albo w Delphi. Jeżeli miałby ktoś jeszcze jakieś sugestie będę niezmiernie wdzięczny za pomoc...

0

probowales odszukac urzadzenie po numerze seryjnym zamiast po opisie?

0

Tak, próbowałem. Efekt dokładnie ten sam

0

masz źródła FT_OpenEx? BTW to jest jakaś funkcja wołana z dll czy coś innego?
I wiesz, że w Delphi XE string jest unicodowy

0

Wiem, dlatego że jest unicodowy przesiadłem się na XE bo w 6 były problemy z obsługą cyrylicy. Funkcja FT_OpenEX jest pobierana z bibliotego ftd2xx.dll i nie bardzo mam do niej dostęp żeby sprawdzić krok po kroku, chyba że jest taka możliwość, której nie znam... Z drugiej strony nazwa urządzenia którą przekazuję nie nie ma żadnych specjalnych znaków więc chyba unicode nie powinien mieć znaczenia

0

pokaż jak wygląda import FT_OpenEx i prawdziwy kod, gdzie ją wywołujesz.

0

TFT_OpenEx = function(pvArg1: String; dwFlags: DWORD; var ftHandle: DWORD): DWORD; StdCall;

w sekcji var
FT_OpenEx: TFT_OpenEx;

w procedurze oncreate formatki

DLL := LoadLibrary('FTD2XX.dll');

@FT_OpenEx := GetProcAddress(DLL,'FT_OpenEx');

i wywołanie funkcji
if (FT_OpenEx('MyDevice', 2, uchwyt) = 0) then

Oczywiście uchwyt jest klasy THandle. Powtórzę, że kod ten działa w Delphi 6 :)

0
TFT_OpenEx      = function(pvArg1: PChar; dwFlags: DWORD; var ftHandle: DWORD): DWORD; StdCall;

lubTFT_OpenEx = function(pvArg1: PAnsiChar; dwFlags: DWORD; var ftHandle: DWORD): DWORD; StdCall;


aż dziw, że się wcześniej nie sypało
0

Działa :), bardzo bardzo serdecznie dziękuję za pomoc i proszę o adres gdzie mogę wysłać packa browarów :)

0

nie kuś bo jeszcze będziesz musiał wysyłać :)
I na przyszłość pamiętaj, że żadna szanująca się biblioteka nie przyjmuje typu string a jedynie PChar

1 użytkowników online, w tym zalogowanych: 0, gości: 1