Witam.
Są to moje początki z LabVIEW, a tym bardziej z C, więc z góry proszę o wyrozumiałość.
Mam problem z prawidłowym wywołaniem funkcji Camera_Open z biblioteki camera.dll. Próbowałem już na wszystkie możliwe kombinacje jakie wpadły mi do głowy, niestety otrzymuje praktycznie zawsze ten sam błąd: "Cannot creato TCamera object". Już nie mam siły się z tym zmagać - odnoszę wrażenie że w moim wypadku to jak walenie głową w mur. Załączam wszystkie wymagane biblioteki do uruchomienia oraz plik CameraUnit1.cpp w którym opisany jest nagłówek funkcji. Jest tam jeden wskaźnik typu void. O ile dobrze zrozumiałem jakieś netowe notatki, to nadal jest wskaźnik typu numerycznego, ale z nieokreślonym rozmiarem do zaalokowania(?). Odnosi się do struktury, której definicja znajduje się w pliku struktura.txt.
Jeśli ktoś z Was znalazł by chwilkę będę wdzięczny za wszelkie wskazówki.
Inicjalizacja kamery poprzez dll.
Inicjalizacja kamery poprzez dll.
- Załączniki
-
- camera_doc.rar
- (1.16 MiB) Pobrany 514 razy
Re: Inicjalizacja kamery poprzez dll.
Wersja dla LV 2009
- Załączniki
-
- camera_doc.rar
- (1.16 MiB) Pobrany 516 razy
-
- Posty: 383
- Rejestracja: 17 lis 2006 00:00
- Wersja środowiska: LabVIEW 2009
- Lokalizacja: Warszawa
Inicjalizacja kamery poprzez dll.
Na to jakiego typu ma być opt pośrednio wskazuje opis:
Musisz taką strukturę zdefiniować w LV i przekazać jako pointer do DLL. Przy czym 4 pozycja to niewątpliwie adres funkcji (tzw. callback), który trzeba wyciągnąć z DLL (tej lub innej) za pomocą funkcji systemowej. Jak to zrobić technicznie jest tutaj: http://lavag.org/topic/13507-labview-qu ... indows-dll
Generalnie wygląda na to, że robisz wrapper do wrappera, który już ktoś zrobił w Borland C, a który jest dość nieczytelny na poziomie kodu. Bo co oznacza liczba kamer jako WEJŚCIE? Albo dlaczego H,W i sn są wejściami, skoro przekazuje się wskaźniki? Z reguły jak inicjuję jakąś kamerę, to chciałbym się dowiedzieć jaką ma rozdzielczość, a nie ją narzucać. sn jeszcze rozumiem - kamerę można wybierać po numerze seryjnym, ale po co w takim razie SetHandle? Wymyśla się go? Zakłada? Iteruje po nim aż się coś znajdzie?
Generalnie radziłbym albo nawiązać bliższą współpracę z autorem camera.dll, który najwyraźniej coś o tej kamerze wie, albo zinterfejsować się do niej bezpośrednio przy użyciu oryginalnej dokumentacji.
Kod: Zaznacz cały
struct TCameraOptions
{
int liczba_kamer;
int tryb_wyzwalania;
int tempo_ramek;
int (*light_function)(bool contin, bool single);
int light_search;
int pixel_format;
};
Generalnie wygląda na to, że robisz wrapper do wrappera, który już ktoś zrobił w Borland C, a który jest dość nieczytelny na poziomie kodu. Bo co oznacza liczba kamer jako WEJŚCIE? Albo dlaczego H,W i sn są wejściami, skoro przekazuje się wskaźniki? Z reguły jak inicjuję jakąś kamerę, to chciałbym się dowiedzieć jaką ma rozdzielczość, a nie ją narzucać. sn jeszcze rozumiem - kamerę można wybierać po numerze seryjnym, ale po co w takim razie SetHandle? Wymyśla się go? Zakłada? Iteruje po nim aż się coś znajdzie?
Generalnie radziłbym albo nawiązać bliższą współpracę z autorem camera.dll, który najwyraźniej coś o tej kamerze wie, albo zinterfejsować się do niej bezpośrednio przy użyciu oryginalnej dokumentacji.
Inicjalizacja kamery poprzez dll.
Dzięki wielkie za wyczerpującą odpowiedź. Wiele mi wyjaśniła.
Zabieram się do edukacji
Zabieram się do edukacji