использование ActiveX DLL в проекте Win32 vc ++ - PullRequest
1 голос
/ 21 августа 2009

У меня есть ScreenCameraSDK, и он поставляется с DLL-файлом размером 11 КБ, в нем также есть документация, в которой перечислены функции, которые можно использовать. Это говорит

Справочная документация по ActiveX ScreenCamera SDK
Справочник ActiveX

Идентификатор ActiveX в системе: ScreenCameraSDK.RemoteControl
Каждый метод интерфейса возвращает FAIL или SUCCESS. (0 или 1).
Создайте экземпляр ActiveX в своем приложении, а затем вызовите InitializeScreenCameraRemoteControl. Если возвращаемое значение - SUCCESS, то ScreenCamera установлен правильно, и вы можете затем вызвать любой другой метод в интерфейсе ActiveX. Если нет, ScreenCamera не может быть найдена, и вам следует обратиться в службу поддержки. **

Теперь мой вопрос: у меня есть dll и других файлов нет. Как я могу использовать функции внутри него в проекте VC ++ с Visual Studio 2008. Спасибо

Я ПОПРОБОВАЛ СЛЕДУЮЩИЙ КОД, НО ПОЛУЧИЛ ОШИБКУ СБОРА НЕОПРЕДЕЛЕННОГО ИДЕНТИФИКАТОРА

  #include <stdio.h>

      // This is the path for your DLL.
      // Make sure that you specify the exact path.

      #import "e:\ScreenCameraSDK.dll"  no_namespace

      void main()
      {
       BSTR bstrDesc;

      try
      {
      CoInitialize(NULL);
      short st = 2;
       short st1;
      // Declare the Interface Pointer for your Visual Basic object. Here,
      // _Class1Ptr is the Smart pointer wrapper class representing the
      // default interface of the Visual Basic object.

      _Class1Ptr ptr;
      // Create an instance of your Visual Basic object, here
      // __uuidof(Class1) gets the CLSID of your Visual Basic object.

       ptr.CreateInstance(__uuidof(Class1));
       st1 = ptr->MyVBFunction(&st);
      }
      catch(_com_error &e)
      {
       bstrDesc = e.Description();

      }
      CoUninitialize();
      }

там написано, что _Class1Ptr неизвестен!

Ответы [ 2 ]

2 голосов
/ 07 ноября 2012
BSTR bstrDesc;

try
{
    HRESULT hr= CoInitialize(NULL);
    CLSID clsid;
    hr = CLSIDFromProgID(OLESTR("<complete class name as see in registry>"),&clsid);
    short st = 2;
    short st1;

//nameOfClassInOCX  is placeholder for explanation. If you OCX com class name is blabla
    //use _blabla and so on. 

    _nameOfClassInOCX * ptr;

    hr = CoCreateInstance(clsid,NULL,CLSCTX_INPROC_SERVER,__uuidof(_nameOfClassInOCX ),(LPVOID*)&ptr);  

    cout << ptr->GetFees("hi") <<endl;
    ptr->Release();
}
catch(_com_error &e)
{
         bstrDesc = e.Description();
}

CoUninitialize();
0 голосов
/ 21 августа 2009

Прежде всего, вам нужно это #import dll, и компилятор автоматически сгенерирует из него все необходимые определения Затем создайте объекты из библиотеки, используя умные указатели или CreateInstance ().

#import "C:\files\test.dll"    no_namespace rename("EOF", "EOFile")

...
int main() {
   if (FAILED(::CoInitialize(NULL)))
      return 0;
    ........
   ::CoUninitialize();
   return 0;
}
...