Российский производитель и разработчик сертифицированного измерительного оборудования с 1987 года


прога падает на CreateInstance

Вы не вошли.

 Поиск | Регистрация | Вход 

Александр
10.08.2011 07:22:29
#1

Гость

прога падает на CreateInstance

Здравствуйте.Начал разбираться с L791,пишу на visual studio 2010 на С++ ., проблема ниже:
привожу кусок кода.

заголовок

#include "..//include//ioctl.h"
#include "..//include//ifc_ldev.h"
#include "..//include//create.h"
#include "..//include//791cmd.h"
#include "..//include//pcicmd.h"


CREATEFUNCPTR CreateInstance;
EXTERN_C const GUID DECLSPEC_SELECTANY IID_ILDEV={0x32bb8320,0xb41b,0x11cf,{0xa6,0xbb,0x00,0x80,0xc7,0xb2,0xd6,0x82}};

и код на загрузку формы

    private: System::Void Form1_Load(System::Object^  sender, System::EventArgs^  e) {
                 ULONG slot = 0; 
                 HINSTANCE hComponent;

                 hComponent=LoadLibraryA("lcomp.dll");
                 if (hComponent == NULL)
                     richTextBox1->AppendText("Немогу загрузить DLL ");
                 else richTextBox1->AppendText("DLL загрузилась ");

                 CreateInstance=(CREATEFUNCPTR)GetProcAddress(hComponent,"CreateInstance");

                 if (CreateInstance == NULL)
                     richTextBox1->AppendText("функция CreateInstance не найдена");
                 else richTextBox1->AppendText("функция CreateInstance=true");
           
                 LUnknown* pIUnknown=NULL;
                 IDaqLDevice* pI=NULL;
                 bool isFind=false;
                 for (int i=0; i<10;i++)
                 {
                     slot=i;
                     if(pI!=NULL)
                     {
                         pI->CloseLDevice();
                         pI->Release();
                         pI=NULL;
                     }
                     pIUnknown = CreateInstance((ULONG)i);
                     if(pIUnknown==NULL)
                         continue;
                     HRESULT hr = pIUnknown->QueryInterface(IID_ILDEV,(void**)&pI);
                     pIUnknown->Release();

                     if(pI->OpenLDevice()==INVALID_HANDLE_VALUE)
                         continue;

                     SLOT_PAR sl;
                     if(pI->GetSlotParam(&sl)!=L_SUCCESS)
                         continue;

                     if(sl.BoardType!=L791)
                         continue;

                     PLATA_DESCR_L791 pd;
                     if(pI->ReadPlataDescr(&pd)!=L_SUCCESS)
                         continue;

                     if(pd.BrdName!="L791")
                         continue;

                     isFind=true;
                     break;

                     if(!isFind)
                     {
                         if(pI!=NULL)
                         {
                             pI->CloseLDevice();
                             pI->Release();
                         }
                        richTextBox1->AppendText("Не нашли плату L791 ");
                        richTextBox1->AppendText(" с 0 по 9 слот: ");
                        
                         return;
                     }   


                 }

               
             }
   
    };

на строке
pIUnknown = CreateInstance((ULONG)i);
программа падает

Программа "[3388] Defectoskope.exe: Управляемый (v4.0.30319)" завершилась с кодом -1073740791 (0xc0000409).
немогу понять в чем дело.?

Александр
10.08.2011 07:25:52
#2

Гость

Re: прога падает на CreateInstance

к слову LoadLibraryA и hComponent возвращают True

Александр
10.08.2011 10:35:38
#3

Гость

Re: прога падает на CreateInstance

Странная проблема...закинул тоже самое в билдер и все работает

12.08.2011 09:06:21
#4

Сотрудник "Л Кард"
Откуда: Москва
Здесь с 23.04.2014
Сообщений: 3,727

Re: прога падает на CreateInstance

Там примеры все написаны и проверялись на VC 2010 Express. В консольном варианте там все нормально работает. Что-то с проектом и его опциями. Lcomp в полном смысле не COM объект.