|
Hi,
I'm in trouble with DCOM objects. I developed an ActiveX EXE by Visual Basic 6.0 which accesses and retrieves data from MS Analysis Services (OLAP) by ADO MD. This object calling by client which is developed by Visual C++ 6.0. If i compile ActiveX EXE in VB by "Thread pool 1 threads" option, system can response in, approximately, 30 seconds. But, if i compile ActiveX EXE in VB by "Thread per Object" option, response time jump to 14 minutes for 1 object instance, without any code maintance. As you know i cannot create multithreaded object from client by "Thread pool 1 threads" option. I have to set "Thread per Object" option in order to create multithreaded object.
Why happenning this process time difference? What is difference between these objects and threading model? How can i overcome it?
Please help me. Thank you
Orkun GEDiK
ASTRON
|
|
|
|
|
Hello
I'm working on COM addin for Microsoft Word application. I build COM addin with two buttons. First button event trigers function TypeText which put some text on screen (in empty document). The problem is when I created thread in COM addin which waits for an event. Thread also includes same function TypeText for printing some text into document. Function is part of "document selection" object declared in MSO.dll. When I trigger an event with second button the function TypeText in my thread is called. I get an error "Exception Handling".
Why the same function does not work in thread?
please help
Here is example of my thread:
void CMyAddin::StartProcOut()
{
CComPtr <msword::selection> oSel;
CComQIPtr <msword::_application> spApp(m_pParentApp);
ATLASSERT(spApp);
_bstr_t Some_Text(OLESTR("HELLO?"));
while (end_thread_out == false){
if (WaitForSingleObject(h_end_th_out,INFINITE) != WAIT_FAILED){
HRESULT hr = spApp->get_Selection(&oSel);
oSel->TypeText(Some_Text);
}
}
}
Tomaz Rotovnik
|
|
|
|
|
|
Dear Ryan
I tried but I do not know if I understand what should I do.
void CMyAddin::StartProcOut()
{
IStream* M_stream;
LPVOID* izh = NULL;
CComPtr oSel;
CComQIPtr spApp(m_pParentApp);
ATLASSERT(spApp);
_bstr_t Some_Text(OLESTR("HELLO?"));
hr = CoInitialize(NULL); //return S_OK
hr = CoMarshalInterThreadInterfaceInStream(IID_IDTExtensibility2,this,&M_stream); //return S_OK
while (end_thread_out == false){
if (WaitForSingleObject(h_end_th_out,INFINITE) != WAIT_FAILED){
HRESULT hr = spApp->get_Selection(&oSel);
oSel->TypeText(Some_Text);
}
}
hr = CoGetInterfaceAndReleaseStream(M_stream,IID_IDTExtensibility2,izh);
CoUninitialize();
}
The CLSID_MyAddin is uniq identifier
static const GUID IID_IDTExtensibility2 =
{0xB65AD801L,0xABAF,0x11D0,{0xBB,0x8B,0x00,0xA0,0xC9,0x0F,0x27,0x44}};
class CMyAddin : public IDTExtensibility2
Is this correct?
I still get: Unhandled exception in WINWORD.EXE 0xC0000005: Access Violation
CMyAddin is created by
class CMyAddinCF : public IClassFactory
Tomaz Rotovnik
|
|
|
|
|
Before the #import directive, put the following lines:
#include <wceatl.h>
#include <comdef.h>
_COM_SMARTPTR_TYPEDEF(IUnknown, __uuidof(IUnknown));
Regards,
João Paulo
|
|
|
|
|
Hello João,
Many thanks for your reply. In continuation of the above, I'm getting error C2065: '_com_issue_errorex' : undeclared identifier now. Could you please tell me what are the header to be included.
Regards,
Amit
|
|
|
|
|
Make the following declaration on that header file:
void __stdcall _com_issue_errorex(HRESULT hr, IUnknown *pUnkn, REFIID riid);
On an implementation file, define it as (can be something else - it is the default error handler):
void __stdcall _com_issue_errorex(HRESULT hr, IUnknown *pUnkn, REFIID riid)
{
TCHAR pcszError[1024];
_stprintf(pcszError, TEXT("_com_issue_errorex(%ld)\n"), hr);
OutputDebugString(pcszError);
ASSERT(pcszError);
}
That should do the trick!
Regards,
João Paulo
|
|
|
|
|
Hello,
I am developing a database application for pocket PC. In my code, if I give a
#import "C:\Program Files\Embedded Tools 3.0\wce300\Pocket PC 2002\dataaccess31\target\arm\adoce31.dll" no_namespace rename("EOF", "EndOfFile")
statement, it gives compiler error
error C2501: 'IUnknownPtr' : missing storage-class or type specifiers.
I tried to look for this problem on the web but there was no satisfactory explaination despite of this being a well known problem. Could anyone please help me out ?
Thanks in advance.
Regards,
nigs_krec
|
|
|
|
|
I have created a toolbar . Now i need to deploy it over the net . I have used two dll files created in the .net framework . I created a cab file which is referenced through the codebase object in the html page . Now when this page is referenced, the inf script is interpreted and the dll's are copied to the mentioned directories and the necessary entries are made . How do i register these into the assembly cache . When i do it manually i use the gacutil and the regasm . But what is the method for doing this while deploying over the internet using a cab file . in the inf file can i mention a batch file to be executed or a dos command to be executed . I heard that the dll's can be built to register themselves . Is it true . If so how di i do it .
Please Help
Srikar Y
NITK Surathkal
|
|
|
|
|
most company's when they develop a software with COM compatibility and can be customized, they deliver a number of dll's but there is one .olb file which hold all the functionally of all dll's. How can I collect all my COM dll's in one .olb file
Regards
|
|
|
|
|
Hi there
I have been accessing databse through oledb consumer
I have a field of date type and the consumer has taken it as DBTIMESTAMP
now i want to convert from DATE type which is basic type in MIDL to DBTIMESTAMP
in msdn it is give that it can be converted but i dont know how
please help me with this
modified 21-Apr-21 21:01pm.
|
|
|
|
|
I've done this by using VariantToSystemTime to pick apart the DATE type, then set the corresponding members of a DBTIMESTAMP from the resulting SYSTEMTIME structure.
Steve S
|
|
|
|
|
Somebody use Microsoft IME in the code?
If yes, tell about it, please.
How can i add Microsoft IME support to my code?
|
|
|
|
|
Please can someone help me by explaining how i can convert a BSTR to DATE data type in ATL
modified 21-Apr-21 21:01pm.
|
|
|
|
|
Hello sohailkadiwala,
Does the BSTR contain a date in string format or does it contain the binary data of a date ?
- Bio.
|
|
|
|
|
Hello Lim Bio Liong
Well It does contain date in string format.
(actually i am using dd/mm/yyyy format in the BSTR)
There is a MFC Class but i am creating component for use with ASP page
Hence i have no support for MFC and the component is loaded InProcess.
So buddy, i am passing date from asp page to my component which is accepted in a BSTR
This BSTR contains date in dd/mm/yyyy format and i want to convert it into DATE.
modified 21-Apr-21 21:01pm.
|
|
|
|
|
Hello sohailkadiwala,
I think the function to use is VarDateFromStr() (#include <oleauto.h>). This function is for general OLE Automation support and its use is not confined to MFC apps alone.
I've written a simple ATL object with a method BstrToDate() :
STDMETHODIMP CDateTimeConversion::BstrToDate(BSTR date_string, DATE *date_value_receiver)
{
// TODO: Add your implementation code here
_bstr_t _bs_t_date_string(date_string, true);
return VarDateFromStr
(
(OLECHAR *)_bs_t_date_string,
(LCID)LOCALE_SYSTEM_DEFAULT,
(unsigned long)(VAR_DATEVALUEONLY),
(DATE *)date_value_receiver
);
}
I've also written a sample client app as follows :
void main()
{
::CoInitialize(NULL);
if (true)
{
IDateTimeConversionPtr spIDateTimeConversion;
BSTR bstr_date_string = _bstr_t(TEXT("04/11/2003")).copy();
DATE date;
spIDateTimeConversion.CreateInstance(__uuidof(DateTimeConversion));
spIDateTimeConversion -> BstrToDate ((BSTR)bstr_date_string, (DATE*)&date);
if (bstr_date_string)
{
::SysFreeString(bstr_date_string);
bstr_date_string = NULL;
}
}
::CoUninitialize();
}
If you need, I can email to you the full source codes to my ATL object and my sample client. Let me know your email address.
Best Regards,
Bio.
|
|
|
|
|
Thanx buddy
Wel i'll try out this function today. If i need i'll let you know about your source code.
BTW my mail id is sohail_k@lycos.com
modified 21-Apr-21 21:01pm.
|
|
|
|
|
convert the BSTR to _bstr_t or LPCSTR and then pass the string to a COleDateTime , see MSDN for COleDateTime help.
it's not so hard. good luck.
|
|
|
|
|
Hi there
Copy your BSTR Object into CComVariant
like
BSTR bstrobj;
CComVariant var(bstrobj);
use this method
var.ChangeType(VT_DATE);
this will convert your var which is holding bstr data to Date type data ,condition applys :BSTR must not hold malicious data
Now u can dine and date with your BSTR..objs.
Abhishek Srivastava
Software Engg (VC++)
India ,Noida
Mobile no 9891492921
|
|
|
|
|
Hi,
is there any way to create in Outlook a Folder under an existing Folder such as "Inbox".
I have to do it in C++ by using the Wrapper-Classe from the Outlook Type Libraries.
I´m new in Automation and have some problems to do it.
Please send help !
Paul
|
|
|
|
|
For this Problem I have the solution.
And here comes the next:
In this new Folder I want to save an item.
How can I search for this folder wich is not the default folder.
Paul
|
|
|
|
|
Hello,
I created 2 .net dlls using C# and visual studio.net. One of the dlls (DLL1) references the other (DLL2).
I then create a .net exe (windows forms) which referenced both the DLLs.
I registered DLL1 with my system com+ services using regsvcs.exe. This was created as a server application with maximum access rights given.
I then created a proxy (proxy application) and deployed it on one workstation along with the .net exe.
When the exe file runs it is able to access DLL1 on the server. But DLL1 is not able to access DLL2.
To overcome this i registered DLL2 in the GAC but the problem was still present.
I want to know whether user created COM+ dlls can access other user created dlls on the system. If so how to do this.
A.Almeida
|
|
|
|
|
does anyone have any experience in this?
I am using a CRecorset (C++) object to pull data from a database. The data field in the recordset is a CTime data object. I am trying to pass the data to a class defined in VB and the property is a Date data type.
Any pointers would be greatly appreciated.
thanks
roger
|
|
|
|
|
We have an .NET service (written in C#, running in the LocalService account), which impersonates an account, opens a CDO session and then reads/writes mails and tasks from/to folders only accessible by the impersonated user.
If the service calls windowsImpersonationContext.Undo() after the CDO session has logged on, it usually can read public folders and their content without a problem. But every once in a while (average after 20 objects have been read), it throws a System.NullReferenceException at System.Runtime.InvokeDispMethod.
If the service does not undo the impersonation and runs in the account which is logged on to Exchange, the NullPointerException is thrown exactly when the fourth CDO object is retrieved. I have already tried opening a new session before opening a folder, but then the Exception is thrown while logging on the fourth session.
If the fourth action is reading the contents of a folder, the NullreferenceException occurs in MAPI.Folder.get_Messages(). If I try to read a message, it occurs in MAPI.Message.get_Text(),
MAPI.Message.get_Attachments() or another get-method.
Here is a typical stack trace for reading message properties:
System.NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
at System.RuntimeType.InvokeDispMethod(String name, BindingFlags invokeAttr, Object target, Object[] args, Boolean[] byrefModifiers, Int32 culture, String[] namedParameters)
at System.RuntimeType.InvokeMember(String name, BindingFlags invokeAttr, Binder binder, Object target, Object[] args, ParameterModifier[] modifiers, CultureInfo culture, String[] namedParameters)
at System.RuntimeType.ForwardCallToInvokeMember(String memberName, BindingFlags flags, Object target, Int32[] aWrapperTypes, MessageData& msgData)
at MAPI.Message.get_Attachments()
at Vita.Bk.SecureItem.CopyFrom(Message message)
And here is a typical stack trace for listing folder items:
System.NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
at System.RuntimeType.InvokeDispMethod(String name, BindingFlags invokeAttr, Object target, Object[] args, Boolean[] byrefModifiers, Int32 culture, String[] namedParameters)
at System.RuntimeType.InvokeMember(String name, BindingFlags invokeAttr, Binder binder, Object target, Object[] args, ParameterModifier[] modifiers, CultureInfo culture, String[] namedParameters)
at System.RuntimeType.ForwardCallToInvokeMember(String memberName, BindingFlags flags, Object target, Int32[] aWrapperTypes, MessageData& msgData)
at MAPI.Folder.get_Messages()
at Vita.Bk.OutlookService.OutlookService.ListUserTodoItems(Object[] parameters) in c:\visual studio-projekte\mba kataster\outlookservice\outlookservice.cs:line 529
That is how the service behaves on .Net Framework 1.0 without service packs. I have installed Service Pack 2, now the NullReferenceExceptions always occur at random, no matter if the service is still impersonating a user or not.
The "Outlook EMail Security" stuff has been configured to allow all MAPI and CDO actions, but there is still no change, the CDO objects are throwing Exceptions after a while.
Does anyone know what happens here? Is is a problem of CDO or .NET Interop?
Thanx in advance,
corinna
|
|
|
|
|