Strona 1 z 1

Inicjalizacja kamery poprzez dll.

: 08 sie 2012 11:27
autor: Zyga
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.

Re: Inicjalizacja kamery poprzez dll.

: 08 sie 2012 15:40
autor: Zyga
Wersja dla LV 2009

Inicjalizacja kamery poprzez dll.

: 08 sie 2012 16:24
autor: vugie
Na to jakiego typu ma być opt pośrednio wskazuje opis:

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;
};
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.

Inicjalizacja kamery poprzez dll.

: 08 sie 2012 17:47
autor: Zyga
Dzięki wielkie za wyczerpującą odpowiedź. Wiele mi wyjaśniła.
Zabieram się do edukacji :)