Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Подключение DLL платы видеозахвата в C#


Автор: G_Vit 7.2.2009, 14:53
Есть задача подключения платы видеозахвата в проекте на C#.
Изготовитель платы разместил на своем сайте DVP-7010A SDK и очень плохое руководство пользователя с большим количеством ошибок.
Есть также наполовину рабочий пример DVP-7010AX_Sample_code, и вот что я там нашел:

есть файл DVP7010ADLL.h
Код
class DVP7010ADLL
{
public:
        int Adv_DVPAPI_CreateSDKInstence(void **pp);
      // почему это отличается от структуры остальных методов???
        virtual int Adv_DVPAPI_GetNoOfDevices() PURE;
        virtual int Adv_DVPAPI_InitSDK(int NoOfDevs, int* IDList) PURE;
        ....
}

а также файл DVP7010AEXEDlg.cpp, где написано следующее
Код
DVP7010ADLL *DVPSDK;

// CDVP7010AEXEDlg message handlers

typedef int (WINAPI* ptr_func1)(void **pp);
ptr_func1 Adv_DVPAPI_CreateSDKInstence  = NULL;

HINSTANCE hDll;

BOOL CDVP7010AEXEDlg::OnInitDialog()
{
....
        hDll = LoadLibrary("DVP7010A");
        if (hDll)
        {
                Adv_DVPAPI_CreateSDKInstence = (ptr_func1)GetProcAddress(hDll,
_T("Adv_DVPAPI_CreateSDKInstence"));
        }
        if (Adv_DVPAPI_CreateSDKInstence((void **)&DVPSDK)!=SUCCEEDED) return TRUE;
...



я выполняю следующее:
точка входа в DLL IntPtr hwnd = LoadLibrary( "DVP7010A.dll" ); // ОК олучил адрес
расположение функции в DLL IntPtr procAddr = GetProcAddress( hwnd,"Adv_DVPAPI_CreateSDKInstence" );   // ОК получил адрес
а дальше что делать с этим не понимаю

Хотелось бы знать, как работать в С# с  С++-ными двойными указателями, есть ли способ заменить их, или как-нибудь представить по другому
Все очень плохо со знанием в плюсах, прошу поподробнее.

Автор: Mikant 9.2.2009, 09:47
Ничто не мешает использовать "небезопасный код" (unsafe) . Там вполне можно и с ** работать ("С++-ными" =))) ). Для этого в свойствах проекта надо поставить галочку "разрешить небезопасный код" ("allow unsafe code"), а в рабочем классе, в качестве, модификатора, выставить unsafe. также можно это слово ставить прямо на небезопасной строке.

А по поводу "ссылка на ссылку", так это то же самое, что и экземпляр класса Б в классе А... (Не забываем, что класс - это ссылочный тип) Учим философию ООП

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)