ошибка oleaut32.dll
От: DrVal  
Дата: 11.04.05 06:49
Оценка:
Здравствуйте!

Объясните, почему приведенный код выдает ошибку "Access violation ... in module 'oleaut32.dll'".
(CBuilder 6, Windows XP home edition)

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop
#include "uidn.h"
#include <objbase.h>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TfmIdent *fmIdent;
//---------------------------------------------------------------------------
__fastcall TfmIdent::TfmIdent(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TfmIdent::FormCreate(TObject *Sender)
{
 loadOpt();
}
//---------------------------------------------------------------------------
void __fastcall TfmIdent::addqNodes()
{
  X("s", "s");
}
//---------------------------------------------------------------------------
void __fastcall TfmIdent::loadOpt()
{
 short Ok;
 IXMLDOMDocument* xOpt;

 CoInitialize (NULL);
 CoCreateInstance (CLSID_DOMDocument, NULL,
   CLSCTX_INPROC_SERVER, IID_IXMLDOMDocument, (void**) &xOpt);

 xOpt->put_async(0);
 VARIANT v;
 v.vt = VT_BSTR;
 v.bstrVal = L"x.xml";
 xOpt->load(v, &Ok);
 xOpt->Release();
 CoUninitialize();
}
//---------------------------------------------------------------------------
void __fastcall TfmIdent::X( char* Nm, char* v)
{

}
//---------------------------------------------------------------------------



//---------------------------------------------------------------------------

#ifndef uidnH
#define uidnH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <Forms.hpp>
#include <msxml.h>

//---------------------------------------------------------------------------
class TfmIdent : public TForm
{
__published:    // IDE-managed Components
        void __fastcall FormCreate(TObject *Sender);
private:
        void __fastcall addqNodes();
        void __fastcall loadOpt();
        void __fastcall X( char* Nm, char* v);
public:
        __fastcall TfmIdent(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TfmIdent *fmIdent;
//---------------------------------------------------------------------------
#endif
Re: ошибка oleaut32.dll
От: DrVal  
Дата: 11.04.05 08:03
Оценка:
даже еще проще:

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop
#include "uidn.h"

//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TfmIdent *fmIdent;
//---------------------------------------------------------------------------
__fastcall TfmIdent::TfmIdent(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TfmIdent::loadOpt()
{
 short Ok;
 char* P1 = "x";
 IXMLDOMDocument* xOpt;

 CoCreateInstance (CLSID_DOMDocument, NULL,
   CLSCTX_INPROC_SERVER, IID_IXMLDOMDocument, (void**) &xOpt);

 VARIANT v;
 v.vt = VT_BSTR;
 v.bstrVal = L"x.xml";
 xOpt->load(v, &Ok);
 xOpt->Release();

}
//---------------------------------------------------------------------------
void __fastcall TfmIdent::FormShow(TObject *Sender)
{
 loadOpt();
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------

#ifndef uidnH
#define uidnH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <Forms.hpp>
#include <msxml.h>

//---------------------------------------------------------------------------
class TfmIdent : public TForm
{
__published:    // IDE-managed Components
  void __fastcall FormShow(TObject *Sender);
private:
        void __fastcall loadOpt();
public:
        __fastcall TfmIdent(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TfmIdent *fmIdent;
//---------------------------------------------------------------------------
#endif


как я понял, глючит из-за

char* P1 = "x";

, причем если длина строки четная, то все OK
Re: ошибка oleaut32.dll
От: Flamer Кипр http://users.livejournal.com/_flamer_/
Дата: 11.04.05 08:30
Оценка:
Здравствуйте, DrVal, Вы писали:

DV>Здравствуйте!


Приветствую.

DV>Объясните, почему приведенный код выдает ошибку "Access violation ... in module 'oleaut32.dll'".

DV>(CBuilder 6, Windows XP home edition)

Плохо, все очень плохо Надо бы основы COM почитать, прежде чем чушь писать. Ниже в коде — комментарии и исправления:

DV>
DV>//---------------------------------------------------------------------------

DV>#include <vcl.h>
DV>#pragma hdrstop
DV>#include "uidn.h"
DV>#include <objbase.h>
DV>//---------------------------------------------------------------------------
DV>#pragma package(smart_init)
DV>#pragma resource "*.dfm"
DV>TfmIdent *fmIdent;
DV>//---------------------------------------------------------------------------
DV>__fastcall TfmIdent::TfmIdent(TComponent* Owner)
DV>        : TForm(Owner)
DV>{
DV>}
DV>//---------------------------------------------------------------------------
DV>void __fastcall TfmIdent::FormCreate(TObject *Sender)
DV>{
DV> loadOpt();
DV>}
DV>//---------------------------------------------------------------------------
DV>void __fastcall TfmIdent::addqNodes()
DV>{
DV>  X("s", "s");
DV>}
DV>//---------------------------------------------------------------------------
DV>void __fastcall TfmIdent::loadOpt()
DV>{
DV> short Ok; // Надо VARIANT_BOOL Ok;
DV> IXMLDOMDocument* xOpt;

DV> CoInitialize (NULL);
DV> CoCreateInstance (CLSID_DOMDocument, NULL,
DV>   CLSCTX_INPROC_SERVER, IID_IXMLDOMDocument, (void**) &xOpt);

//Нет проверки на то, что сервер создался успешно 

 xOpt->>put_async(0);// Опять неправильно - надо xOpt->put_async(VARIANT_FALSE);
DV> VARIANT v; // Пропущен VariantInit(&v);
DV> v.vt = VT_BSTR;
DV> v.bstrVal = L"x.xml"; // Ну кто так делает? Надо бы v.bstrVal = SysAllocString(L"x.xml");
 xOpt->>load(v, &Ok);
 xOpt->>Release();
DV> CoUninitialize();
DV>}
DV>//---------------------------------------------------------------------------
DV>void __fastcall TfmIdent::X( char* Nm, char* v)
DV>{

DV>}
DV>//---------------------------------------------------------------------------
DV>


Вот такие пироги с котятами. В смысле то, что углядел сходу...
Re[2]: ошибка oleaut32.dll
От: DrVal  
Дата: 11.04.05 09:31
Оценка:
грубовато, конечно... но спасибо, помогло .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.