Здравствуйте!
Объясните, почему приведенный код выдает ошибку "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
даже еще проще:
//---------------------------------------------------------------------------
#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
Здравствуйте, 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>
Вот такие пироги с котятами. В смысле то, что углядел сходу...
грубовато, конечно... но спасибо, помогло
.