Re: ATL shell extension calls an ATL COM object but crashes after
I assume you mean the .tlh file I have inside my project? Let me know if it's
something else that you mean.
It looks like this:
// Created by Microsoft (R) C/C++ Compiler Version 15.00.21022.08 (73fa1492).
//
// C:\DOCUME~1\Magnus\LOCALS~1\Temp\Myupload.tlh
//
// C++ source equivalent of Win32 type library MyUpload.dll
// compiler-generated file created 02/26/08 at 13:16:01 - DO NOT EDIT!
#pragma once
#pragma pack(push, 8)
#include <comdef.h>
namespace MyUploadLib {
//
// Forward references and typedefs
//
struct __declspec(uuid("cc8f95ec-01b0-454a-8973-09b35a46ca34"))
/* LIBID */ __MyUploadLib;
struct /* coclass */ MyUploadObj;
struct __declspec(uuid("45dbfcf5-d41d-4458-94c8-fe9df91ffcbe"))
/* dual interface */ IMyUploadObj;
//
// Smart pointer typedef declarations
//
_COM_SMARTPTR_TYPEDEF(IMyUploadObj, __uuidof(IMyUploadObj));
//
// Type library items
//
struct __declspec(uuid("6805d829-5a9f-4d36-adf5-78da0f16fd63"))
MyUploadObj;
// [ default ] interface IMyUploadObj
struct __declspec(uuid("45dbfcf5-d41d-4458-94c8-fe9df91ffcbe"))
IMyUploadObj : IDispatch
{
//
// Wrapper methods for error-handling
//
HRESULT uploadFile (
BSTR * filename );
_bstr_t get_ErrorMsg ( );
_bstr_t get_UploadStatusUrl ( );
HRESULT authenticate (
BSTR * env );
//
// Raw methods provided by interface
//
virtual HRESULT __stdcall raw_uploadFile (
/*[in]*/ BSTR * filename ) = 0;
virtual HRESULT __stdcall raw_get_ErrorMsg (
/*[out,retval]*/ BSTR * errorMsg ) = 0;
virtual HRESULT __stdcall raw_get_UploadStatusUrl (
/*[out,retval]*/ BSTR * uploadStatusUrl ) = 0;
virtual HRESULT __stdcall raw_authenticate (
/*[in]*/ BSTR * env ) = 0;
};
//
// Wrapper method implementations
//
#include "C:\DOCUME~1\Magnus\LOCALS~1\Temp\Myupload.tli"
} // namespace MyUploadLib
#pragma pack(pop)
"SvenC" wrote:
Hi TexMags,
CComBSTR cbstrAuthEnv = "env1";
CComBSTR cbstrFilename = "C:\Test.doc";
CoInitialize(NULL);
MyUploadLib::IMyUploadObjPtr upload;
upload.CreateInstance(__uuidof(MyUploadLib::MyUploadObj));
You should do some error handling otherwise you could
use an invalid object in the next line.
upload->authenticate(&cbstrAuthEnv);
...
CoUninitialize();
It is when the call to authenticate that it normally crashes. Like I
mentioned earlier, the identical code runs fine if I have everything
inside the shell extension.
Please show the interface definition of IMyUploadObj and
your implementation of authenticate. If the crash happens
on that call I suspect the problem in that implementation.
--
SvenC