|
Hello,
I have an ATL COM Server with one dual interface. I can instantiate
the interface via Javascript, VBScript, no problem. If one
instance of the interface exists, it registers into the ROT (Running Object Table). So far I could not figure out if I am doing the registration wrong
or my Javascript knowledge is too small to get my hands on the already running
interface via the ROT in JScript oder VBScript.
<br />
Var server;<br />
<br />
server = WScript.GetObject("","COMTest.Application");<br />
It always instantiates a new interface leading to two ROT entries!
The only method I know is:
<br />
Var server;<br />
<br />
server = WScript.GetObject(,"COMTest.Application");<br />
But this gives syntax error, but may work in Visual Basic (not script).
Which always useses the existing instance of the interface.
Any suggestions ?
Yours,
Alois Kraus
|
|
|
|
|
Hi,
I want to delete all the bvs and exe files as the come into exchanger server and before user can get those emails. How can i do that?
This is urgent and response will be very much appreciated.
Thank you!
Ammad
We learn by sharing knowledge
Ammad
|
|
|
|
|
sorry this is COM section....
u want to send mail when u click some button/something?
http://www.codeproject.com/staticctrl/CMyHyperLink.asp
~~~~Code the Dreams~~~~~
|
|
|
|
|
Please don't cross-post (post in multible forums), it makes people kinda mad, and then you don't get any answers.
BTW, I did answer your question in the ATL/WTL forum.
- Anders
Money talks, but all mine ever says is "Goodbye!"
|
|
|
|
|
I design a COM object by ATL, which has two IDispath. Default dispatch is IPlot2D, and the second is IMIDraw.
IMIDraw has a method Plot(), how do I launch Plot() method?
|
|
|
|
|
Define some method of default IPlot2D interface which will return the IMIDraw interface.
<br />
In idl:<br />
[propget] HRESULT DrawManager([out,retval]IMIDraw ** ppDraw)
In C++:<br />
STDMETHODIMP HRESULT CPlot2D::DrawManager(IMIDraw ** ppDraw)<br />
{<br />
return QueryInterface(IID_IMIDraw,(void**)ppDraw);<br />
}
<br />
In VB:<br />
Dim o As Plot2D, o2 As IMIDraw<br />
Set o = CreateObject("PlotLib.Plot2D") ' or = New Plot2D<br />
Set o2 = o.DrawManager<br />
o2.Plot<br />
' Or<br />
o.DrawManager.Plot
<br />
In VBScript:<br />
Dim o, o2<br />
Set o = CreateObject("PlotLib.Plot2D")<br />
Set o2 = o.DrawManager <br />
o2.Plot<br />
' Or<br />
o.DrawManager.Plot
With best wishes,
Vita
|
|
|
|
|
You can't have 2 IDispatch interface on one COM object.
--
Only in a world this sh*tty could you even try to say these were innocent people and keep a straight face.
|
|
|
|
|
QueryInterface
~~~~Code the Dreams~~~~~
|
|
|
|
|
As the title, how can I perform that with programmatically?
My Com+ plus is inherited from ServicedComponent and implements
an interface(dual) defining by myself. Thanks ahead!
|
|
|
|
|
You can do it either by hand ( open Component Sevices console, etc) or programatically , using COMAdminCatalog component.
|
|
|
|
|
I know some of COMAdminCatalog, but i have no idea of those properties which are the correct ones to set. I set RemoteServerName and it really be set on the Com+ database but does not effect somewhat.
|
|
|
|
|
I have never ever worked with a SafeArray, and I have a few problems using it
I have this line in my code:
SAFEARRAY *sa = kvset->GetKVSetArray(L"results");
where kvset is a COM Object.
My problem is that I know that the SafeArray sa contains IDispatch* interfaces.
But I cannot get a interface, and make a successfull QueryInterface on it...
Anuone have a couple of lines of code that does the trick?
- Anders
Money talks, but all mine ever says is "Goodbye!"
|
|
|
|
|
If that's a IDispatch*, then you might just as well end up with an Invoke method call. At least, that's what the IDispatch interface is for.
|
|
|
|
|
But how... Please...
Sorry to ask, but I have used the last 6 hours trying to get this stuff to work, and right now my brain has almost stopped working
This is the first time I have ever worked with a SafeArray, and it really baffles me
- Anders
Money talks, but all mine ever says is "Goodbye!"
|
|
|
|
|
if anyone is interested, this did the trick
SAFEARRAY *pSafeArray = kvset->GetKVSetArray(L"results");
IDispatch** pIDispatch;
SafeArrayAccessData(pSafeArray, (void**)&pIDispatch);
IKVSet *test;
pIDispatch[0]->QueryInterface(__uuidof(IKVSet), (void**)&test);
SafeArrayUnaccessData(pSafeArray);
test->Release();
- Anders
Money talks, but all mine ever says is "Goodbye!"
|
|
|
|
|
Hi dear,
I'm looking for an article or sample, demonstrates using Office xp(2000) Chart in a VC++ or C# project.
Thank you in advance.
|
|
|
|
|
In Client program CoCreateInstanceEx returns 0x80040154 - "Class not registered" even though the class is registered. Also OLE/COM Viewer is not showing me the object (only typelib). My server is .exe and is 'Attributed'. Also noticed that when creating a non-attributed ATL server project , class can be seen in OLE/COM Viewer, but it doesn't expose custom interfaces (only IUnknown, IClientSecurity, IMultiQI and IMarshal).
Can anybody help me out here?
|
|
|
|
|
try to unregister your ATL.dll and re register that...
~~~~Code the Dreams~~~~~
|
|
|
|
|
i've got the same problem.
I created a regular COM object with ATL, it worked fine by using the CoCreateInstance(), and then install the COM object to a COM+ application with Component Services administrative tool, when I try to call CoCreateInstance in my client code, I got "no such interface supported" error, the returned HRESULT is E_NOINTERFACE. But if I delete the object from COM+ application, and just register the component with regsvr32 command, my client works, again. Anything I have missed when I installed the component into the COM+ application?
|
|
|
|
|
My DCOM server (developed in VC++ NET) can not access file system (eg. create files, etc...) but he runs on administrator account. Can anyone tell me why ?
|
|
|
|
|
If you mean system account (for example as a service), this is by default. You have to enable rights or work as another user to access file system
|
|
|
|
|
Hello,
I want to know if there is any way to get an handle to PopUp box / Alert box.
These alert's are mostly displayed by Javascript functions on a webpage display.
I have a Webbrowser Control in my C++ application(mfc) and need to know when the Alert box is shown and also what was the user's action on it(He/she might click OK or Cancel button).
Thanking you in advance.
Prasad
|
|
|
|
|
hi,
I'm developing ATL ActiveX EXE server that runs as a Window services using ATL wizard.
This server contains one ATL object (CTest).
How I can set the server so that when it started (via Window Services Applet), the server will :
1) initiate/create CTest.
2) Call method/function in this ATL object (CallMe).
3) destroy CTest when server stopped.
Thanx in advance.
Regards.
|
|
|
|
|
You will need to overwrite CServiceModule::Run - after the service will register the class objects, init your object and call the method. After the message loop sequence, destroy your object.
|
|
|
|
|
hi,
thanx for ur replay
I've change my code. But when I try to start my service I got an error :
Could not start the Test on Local Computer.
Error 1053: The service did not respond to the start or control request
in a timely fashion.
And one more thing; how i want to destroy the ATL object in a correct way:
m_Obj->Release()
or
m_Obj = NULL
Below is code for CServiceModule::Run() :
<small>void CServiceModule::Run()<br />
{<br />
_Module.dwThreadID = GetCurrentThreadId();<br />
<br />
HRESULT hr = CoInitialize(NULL);<br />
<br />
_ASSERTE(SUCCEEDED(hr));<br />
<br />
CSecurityDescriptor sd;<br />
sd.InitializeFromThreadToken();<br />
hr = CoInitializeSecurity(sd, -1, NULL, NULL,<br />
RPC_C_AUTHN_LEVEL_PKT, RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE, NULL);<br />
_ASSERTE(SUCCEEDED(hr));<br />
<br />
hr = _Module.RegisterClassObjects(CLSCTX_LOCAL_SERVER | CLSCTX_REMOTE_SERVER, REGCLS_MULTIPLEUSE);<br />
_ASSERTE(SUCCEEDED(hr));<br />
<br />
<big>
CComObject<CMyObj> *m_Obj;<br />
CComObject<CMyObj>::CreateInstance(&m_Obj);</big><br />
<br />
<big>
m_Obj->CallMe();</big><br />
<br />
LogEvent(_T("Service started"));<br />
if (m_bService)<br />
SetServiceStatus(SERVICE_RUNNING);<br />
<br />
MSG msg;<br />
while (GetMessage(&msg, 0, 0, 0))<br />
DispatchMessage(&msg);<br />
<br />
<big>
m_Obj->Release();</big><br />
<br />
_Module.RevokeClassObjects();<br />
<br />
CoUninitialize();<br />
}</small>
Below is code for CMyObj :
<small>HRESULT CMyObj::FinalConstruct()<br />
{<br />
return S_OK;<br />
}<br />
<br />
void CMyObj::FinalRelease()<br />
{<br />
<br />
}<br />
<br />
<big>STDMETHODIMP CMyObj::CallMe()<br />
{<br />
MessageBox(NULL, "Window services called me.", "MyObj", MB_OK);<br />
return S_OK;<br />
}</big></small>
Sorry for the silly questions.
Thanx in advance.
Regards.
|
|
|
|