|
Thanks.
That got me thinking that my project was not setup as it should be. And low and behold it was not. I needed to be using a MFC Extension dll. Everything works great now. Dumb mistake, but like I said, I am new to COM(and to dlls).
Matt (Padawan Learner)
|
|
|
|
|
Hi:
I have a com+ component installed using a application proxy on a remote computer. By the way, I have no problems when running the local client. I'm using a VB.NET Client.
The problem occurs when I try to execute a method on the remote object:
--------------------------------------------------------------
An unhandled exception of type 'System.InvalidCastException' occurred
in Client.exe
Additional information: QueryInterface for interface
MyComponentLib.IMyInterface failed.
--------------------------------------------------------------
Interestingly, The instantiation of the remote object by CreateObject succeeds and the application is activated on the server machine, i.e., I can see the rolling icon animation.
Activating proxy in OLEVIEW also succeeds.
The security is set to Interactive at this point.
If I use a VB6 client I get 'Run-Time Error 424 Object Required' when I call CreateObject!!
This is a very simple COM+ app but I'm really stuck!
I'll appreciate any help...
Thanks
|
|
|
|
|
Greets,
Is the interface for the COM+ application which is installed on the server also available to your application on the client machine? Did you export the application from the server and install it on the client machine from which your application is running?
When I refer to application, you can install your component in COM+ on the server machine, then use COM+ services to export an MSI package that will install the necessary information on the client needed to make the call remotely.
Regards,
Joe
|
|
|
|
|
The proxy appliction was exported from the server appliations as MSI package which was then installed on the client machine.
The local client works fine.
What I have seen in the debugger is that the remote client can instantiate the component. The query to object's IUnknown interface succeeds, i.e., returns S_OK. However after that what happens I don't know - I can't see it in the debugger.
|
|
|
|
|
How is your client calling CoInitializeSecurity?
Are your client and server using the same or different SIDs?
Steve S
|
|
|
|
|
Hello all,
In my shell extension dll, there are some codes like that (call another COM component):
......
hr = CoGetClassObject(CLSID_Class1, CLSCTX_ALL, NULL,
IID_IClassFactory, (void**)&pcf);
(now hr = S_OK)
hr = pcf->CreateInstance(NULL, IID_Interface1, (void**)&pi);
(ERROR: "Can't find the registered interface")
CLSID_Class1 is also a COM component written by myself and I've written a simple exe app to test this component and find it runs ok. So it means the GUIDs have been registered in the registry successfully and the component itself is correct.
Why the shell extension dll calls the CLSID_Class1 component will be fail but the exe application calls it successfully?
Both the shell extension COM and CLSID_Class COM are all "Apartment" thread model.
Thanks a lot
|
|
|
|
|
Hi,
I read in a book on COM that COM is language independent viz. you can create and use COM components in any language. I was wondering how do I go about using a COM component (created in VC++) in a Java client program?
Thanks,
Melwyn
|
|
|
|
|
|
Yeah, it was not exactly what I was looking for, but thanks anyway.
Regards,
Melwyn
|
|
|
|
|
can anyone show me how to make some parameter of a method as default.
Like this:
STDMETHOD(Test)(BSTR bsValue);
how to make "bsValue" as a default parameter like in c++(Test(BSTR bsValue=NUU)
Many many thx
|
|
|
|
|
For C|C++ clients there is no sense for this - they must always specify the parameter.
Though MIDL has two keys to do it - [defaultvalue] and [optional]. The [optional] applies to the VARIANT parameter. The [defaultvalue] applies to other types.
With best wishes,
Vita
|
|
|
|
|
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
|
|
|
|
|
Hi,
Your best approach would probably be to create an MSI installation package for your component. It will package all of the dependencies required (if necessary) and also register your component into the GAC (Global Assembly Cache) if you create that folder in your installation project and ensure that you strongly name your component by signing it with the generated key.
If you are referring to other means of COM component registration, it still requires the registration of a type library which can be created and installed as part of the package as well.
Regards,
Joe
|
|
|
|
|
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
|
|
|
|
|
I want to add a button to the outlook toolbar
this button should also appear on teh child windows (New message window, reply window, etc)
Pls Help
|
|
|
|
|
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
|
|
|
|