V funkcii ReadFromFile ya prosto chitau text iz faila i vozvrashau ego.
I poluchau — error : Memory couldn't be 'written'
hotya tot zhe kod v obichnoi programme (ne v COM) rabotaet bezukoriznenno, edinstvennoe otlichie preobrazovanie iz char* v BSTR.
Esli uvazhaemie specialisti smogut vzglyanut' na privedennii nizhe code i ukazat' mne na oshibku budu priznatelen :-).
Здравствуйте sndralex, Вы писали:
S>Uvazhaemie Gospoda! S>Pomogite razobrat'sya s problemoi: S>Ya sozdau s pomosh'u ATL elementarnij COMponent s dvumya funkciyami:
S>[id(1), helpstring("method ReadFromFile")] HRESULT ReadFromFile([in] BSTR fName, [out, retval] BSTR *txtRet); S>[id(2), helpstring("method Save2File")] HRESULT Save2File([in] BSTR fName, [in] BSTR txt2save);
S>V funkcii ReadFromFile ya prosto chitau text iz faila i vozvrashau ego. S>I poluchau — error : Memory couldn't be 'written' S>hotya tot zhe kod v obichnoi programme (ne v COM) rabotaet bezukoriznenno, edinstvennoe otlichie preobrazovanie iz char* v BSTR.
S>Esli uvazhaemie specialisti smogut vzglyanut' na privedennii nizhe code i ukazat' mne na oshibku budu priznatelen .
Здравствуйте sndralex, Вы писали:
S>Uvazhaemie Gospoda! S>Pomogite razobrat'sya s problemoi: S>Ya sozdau s pomosh'u ATL elementarnij COMponent s dvumya funkciyami:
A2OLE (kak i voobshe SysAllocString) podrazumevajut, chto v pBuf lezhit NULL-terminated string. A u tebya fail vryad li nulem zakanchivaetsya. Poprobuj tak:
Здравствуйте Dront, Вы писали:
D>A2OLE (kak i voobshe SysAllocString) podrazumevajut, chto v pBuf lezhit NULL-terminated string. A u tebya fail vryad li nulem zakanchivaetsya. Poprobuj tak: D>
D>pBuf = new char[dwFileSize+1];pBuf[dwFileSize]=0;
D>
Spasibo za vash otvet, no poka ne pomoglo. Ya vstavil rekomenduemii vami code
pBuf = new char[dwFileSize+1];pBuf[dwFileSize]=0;
Pri obrashenii k etoi funkcii iz VBClienta ya po prezhnemu poluchau "Memory couldn't be written", a esli prohozhu debuggerom to prohozhu vse do konca a po vihodu iz funkcii na
return S_OK;
ya poluchau soobshenie :
"User breakpoint called from code at 0xbla-bla"
i perehozhu na assembler.
Tolkom ne zanu eto govorit o kakoi-to oshibke ili eto normalnoe zavershenie funkcii .
Budu priznatelen za vashu pomosh'.
К сказанному VladD2 добавить вроде нечего, но вот по поводу нижеотквоченного вопроса есть комментарий.
S>ya poluchau soobshenie : S>"User breakpoint called from code at 0xbla-bla" S>i perehozhu na assembler. S>Tolkom ne zanu eto govorit o kakoi-to oshibke ili eto normalnoe zavershenie S>funkcii .
Дело в том, что в debug configuration VisualStudio "обрамляет" выделенные куски памяти символами 0xCC, чтобы потом по ним ловить ошибки с выделением памяти. Этот код, кроме прочего, соответствует ассемблерной команде int 3 (user breakpoint). Вывод: если в программе вываливается невесть откуда user breakpoint, ищи беды с пямятью, перезаписывающие код программы или стэк.