|
I think that you need to add something like this to registry:
<br />
HKEY_CLASSES_ROOT\makecall\@ = URL: makecall Protocol<br />
HKEY_CLASSES_ROOT\makecall\URL Protocol = ""<br />
HKEY_CLASSES_ROOT\makecall\DefaultIcon\@ = C:\YourIcon.ico<br />
HKEY_CLASSES_ROOT\makecall\shell\@ = open<br />
HKEY_CLASSES_ROOT\makecall\shell\open\command\@ = "C:\YourApp.exe" "%1"<br />
i'm only pointer to myself
|
|
|
|
|
I create one remote com object - 'execel.exe' to build
execel report. but I want to know the ProcessID of this remote object. Who can help me ?
best regards!
|
|
|
|
|
just add this method
GetServerId([out] DWORD* dwProcessId);
GetCurrentProcessId() look in msdn and there you are.
|
|
|
|
|
Hi every body
I'm just a beginner in COM, and as a beginner, i'm starting with sample codes like those of MSDN.
When running this piece of code:
_Application app;
if ( !app.CreateDispatch("Excel") )
AfxMessageBox("Could not start excel);
else
{
app.SetVisible(TRUE);
AfxMessageBox("Excel is running.");
}
i got an unhandled exception:
unhandled exception in XXX.exe(MFC042D.DLL):OxC000005:access violation
when app.CreateDispatch(...) is called.
Is there any body who know what could be wrong ?
Note: I'm using VC 6.0, with Office 97, and i already check for the good excel library.
Thanks in advance
|
|
|
|
|
Shouldn't that be
CreateDispatch("Excel.Application")
Steve S
|
|
|
|
|
You're rigth. It was just a mistake when I wrote my message. It should be Excel.Application. Sorry.
My PB remains.
Thanks
|
|
|
|
|
Did u initialize COM?
Papa
while (TRUE)
Papa.WillLove ( Bebe ) ;
|
|
|
|
|
Yes I did ...
if you was thinking at
<br />
BOOL CAutoProjectApp::InitInstance()<br />
{<br />
if ( !AfxOleInit())<br />
{<br />
AfxMessageBox("Could not initialize COMM dll");<br />
return FALSE;<br />
}<br />
......<br />
<br />
... no problem with this part of code.
Thanks for your answer
|
|
|
|
|
I have been thinking about this problem for days, and am unsure on the best way to proceed as I dont have enough experience. My problem is that I have a IDispatch server component sitting on a remote computer, running with DCOM, to which I need to send a very large (from 30KB upwards to about 2MB) string. Currently I have implemented this by calling my server method HRESULT ReceiveText( BSTR ) but I am concerned that this is not particularly efficient.
Alternatively I can save the text to a networked shared file which the remote server could read, but that not be a good solution for when the remote server is too remote. However the advantage of using a file is that I can zip it, which reduces the text to approx 6-8% in size.
My question is therefore what is the best way of sending/receiving text using DCOM and does anyone know of any components that I could use to zip/unzip the text before/after sending? I will be grateful for any comments and suggestions. Thank you.
|
|
|
|
|
In terms of archiving, check out CodeProject code section.
As for data sharing, one solution is TCP/IP.
Kuphryn
|
|
|
|
|
If you have to use IDispatch, then you could take advantage of the fact that a BSTR isn't necessarily a string, but is a byte counted block of words.
That would let you use zlib to compress the data in the sender, and to uncompress it in the receiver.
Steve S
|
|
|
|
|
Thanks to Kuphryn and Steve for both the replys. I intend to zip/unzip the string as suggested in order to save transmission time, and am incorporating some of the info from some of the helpful articles in CodeProject. I would also like to consider TCP/IP as a solution but that will be some steep learning so I will delay that for now. Thanks again.
|
|
|
|
|
Dear friends ,i am facing a criticalerror,pls help me out :-
My MTS component(developed using ATL and using ADO to access SQL Server) running on Win 2k behaving well normally without any error,but sometimes it abort when firing a SQL query before deafult transaction time out period ( 60 sec) and produce following error in event log file:-
"New transaction cannot enlist in the specified transaction coordinator" .
This error is occuring rarely.Pls tell what can be its reason and how to fix it .
regards
akshay
Other entries in event log file is as:-
(3016,2828)2003/09/16 15:46:00.638 H:0337 W:10158080 P:4603904 ERROR: COM
Exception in setConnection() [DbKernel.cpp(75)]
ADO ERROR @: File name=C:\ProgramFiles\......mercury_wms.udl
ADO ERROR 1: 0x8004d00a
Source : Microsoft OLE DB Provider for SQL Server
Description: New transaction cannot enlist in the specified transaction coordinator.
SqlState : (null)
NativeError: 0x0
HelpFile : (null)
HelpContext: 0
ERROR: COM Exception in executeQuery() [DbKernel.cpp(171)]
ADO ERROR 1: 0x8004d00a
Source : Microsoft OLE DB Provider for SQL Server
Description: New transaction cannot enlist in the specified transaction coordinator.
SqlState : (null)
NativeError: 0x0 HelpFile : (null)
HelpContext: 0
ERROR: Error SQL : set transaction isolation level read committed;
INSERT INTO MRC_STOCK_DATA (STOCK_ITEM_GUID, WAREHOUSE_GUID,ITEM_ID,
UNIT_ID,TOTAL_RECEIVED,TOTAL_REJECTED, TOTAL_PICK_RESERVE,TOTAL_PICKED,
TOTAL_ADJUSTED,TOTAL_RETURNED,TOTAL_DISPOSED_OFF,TOTAL_PACKED,
TOTAL_SHIPPED,ON_HAND, ON_HOLD,TOTAL_EXCESS,ON_ORDER,ON_RESERVE,
CREATED_BY, LAST_MODIFIED_BY) Select newid(),WAREHOUSE_GUID,
'{B3CE6383-EE8A-4131-8F85-6C8EB4C994B3}','{6AA23C56-7A4F-11D2-84B0-0000F80
627E2}',0,0,0,0,0,0,0,0,0,0,0,0,0,0, 'eStore_User','eStore_User' From
Mrc_Warehouse [DbKernel.cpp(173)]
(3016,2828)2003/09/16 15:46:00.654 H:0337 W:10162176 P:4608000 ERROR: ADO
Error!- Catch Block [DalKernel.cpp(150)]
COM ERROR : 0x8004d00a
Meaning : IDispatch error #52746
Source : (null)
Description: (null)
ERROR: Generated BS error code: 0x3004009a, returned error code:0x800460ff [DalKernel.cpp(156)]
UNIT_ID,TOTAL_RECEIVED,TOTAL_REJECTED, TOTAL_PICK_RESERVE,TOTAL_PICKED,
TOTAL_ADJUSTED,TOTAL_RETURNED,TOTAL_DISPOSED_OFF,TOTAL_PACKED,
TOTAL_SHIPPED,ON_HAND, ON_HOLD,TOTAL_EXCESS,ON_ORDER,ON_RESERVE,
CREATED_BY, LAST_MODIFIED_BY) Select newid(),WAREHOUSE_GUID,
'{B3CE6383-EE8A-4131-8F85-6C8EB4C994B3}','{6AA23C56-7A4F-11D2-84B0-0000F80
627E2}',0,0,0,0,0,0,0,0,0,0,0,0,0,0, 'eStore_User','eStore_User' From
Mrc_Warehouse [DbKernel.cpp(173)]
(3016,2828)2003/09/16 15:46:00.654 H:0337 W:10162176 P:4608000 ERROR: ADO
Error!- Catch Block [DalKernel.cpp(150)]
(3016,2828)2003/09/16 15:46:00.654 H:0337 W:10162176 P:4608000 COM ERROR
: 0x8004d00a
(3016,2828)2003/09/16 15:46:00.654 H:0337 W:10162176 P:4608000 Meaning
: IDispatch error #52746
(3016,2828)2003/09/16 15:46:00.654 H:0337 W:10162176 P:4608000 Source
: (null)
(3016,2828)2003/09/16 15:46:00.654 H:0337 W:10162176 P:4608000
Description: (null)
(3016,2828)2003/09/16 15:46:00.654 H:0338 W:10162176 P:4608000 ERROR:
Generated BS error code: 0x3004009a, returned error code: 0x800460ff
[DalKernel.cpp(156)]
|
|
|
|
|
Hi guys!
I have a problem with my ActiveX component, that i developed (with VS.NET, ATL7, C++)!
I created a ActiveX component with one property "FileName", who's a BSTR.
I have included my ActiveX component in a Visual Basic sample. The property "FileName"
is visible in the object property viewer and I can change his value! That's fine!
But when I start my Visual Basic sample, the ActiveX component will use the old
standard value of "FileName" and not the value I have changed during the design time!
Is this normal? How can I fix it?
Here is a little of my source code, the header file:
#pragma once
#include "resource.h"
#include <atlctl.h>
#include "DCIpuControl2003.h"
class ATL_NO_VTABLE CFileLogTarget :
public CComObjectRootEx<CComSingleThreadModel>,
public IDispatchImpl<IFileLogTarget, &IID_IFileLogTarget, &LIBID_DCIpuControl2003Lib, 1, 0>,
public IPersistStreamInitImpl<CFileLogTarget>,
public IOleControlImpl<CFileLogTarget>,
public IOleObjectImpl<CFileLogTarget>,
public IOleInPlaceActiveObjectImpl<CFileLogTarget>,
public IViewObjectExImpl<CFileLogTarget>,
public IOleInPlaceObjectWindowlessImpl<CFileLogTarget>,
public CComCoClass<CFileLogTarget, &CLSID_FileLogTarget>,
public CComControl<CFileLogTarget>
{
public:
CFileLogTarget() : m_bstrFileName(OLESTR("IpuLogFile.dat"))
{
m_bAutoSize = TRUE;
m_bResizeNatural = TRUE;
SIZEL sPix, sHiM;
sPix.cx = 32;
sPix.cy = 32;
AtlPixelToHiMetric(&sPix, &sHiM);
m_sizeExtent = sHiM;
m_sizeNatural = sHiM;
}
DECLARE_OLEMISC_STATUS(OLEMISC_RECOMPOSEONRESIZE |
OLEMISC_INVISIBLEATRUNTIME |
OLEMISC_CANTLINKINSIDE |
OLEMISC_INSIDEOUT |
OLEMISC_ACTIVATEWHENVISIBLE |
OLEMISC_SETCLIENTSITEFIRST
)
DECLARE_REGISTRY_RESOURCEID(IDR_FILELOGTARGET)
BEGIN_COM_MAP(CFileLogTarget)
COM_INTERFACE_ENTRY(IFileLogTarget)
COM_INTERFACE_ENTRY(IDispatch)
COM_INTERFACE_ENTRY(IViewObjectEx)
COM_INTERFACE_ENTRY(IViewObject2)
COM_INTERFACE_ENTRY(IViewObject)
COM_INTERFACE_ENTRY(IOleInPlaceObjectWindowless)
COM_INTERFACE_ENTRY(IOleInPlaceObject)
COM_INTERFACE_ENTRY2(IOleWindow, IOleInPlaceObjectWindowless)
COM_INTERFACE_ENTRY(IOleInPlaceActiveObject)
COM_INTERFACE_ENTRY(IOleControl)
COM_INTERFACE_ENTRY(IOleObject)
COM_INTERFACE_ENTRY(IPersistStreamInit)
COM_INTERFACE_ENTRY2(IPersist, IPersistStreamInit)
END_COM_MAP()
BEGIN_PROP_MAP(CFileLogTarget)
PROP_DATA_ENTRY("_cx", m_sizeExtent.cx, VT_UI4)
PROP_DATA_ENTRY("_cy", m_sizeExtent.cy, VT_UI4)
END_PROP_MAP()
BEGIN_MSG_MAP(CFileLogTarget)
CHAIN_MSG_MAP(CComControl<CFileLogTarget>)
DEFAULT_REFLECTION_HANDLER()
END_MSG_MAP()
DECLARE_VIEW_STATUS(0)
public:
HRESULT OnDraw(ATL_DRAWINFO& di);
DECLARE_PROTECT_FINAL_CONSTRUCT()
HRESULT FinalConstruct()
{
USES_CONVERSION;
TCHAR pszStr[256];
_stprintf(pszStr, _T("Open / create file '%s'."), OLE2CT(m_bstrFileName));
MessageBox(pszStr);
return S_OK;
}
void FinalRelease()
{
USES_CONVERSION;
TCHAR pszStr[256];
_stprintf(pszStr, _T("Close file '%s'."), OLE2CT(m_bstrFileName));
MessageBox(pszStr);
}
public:
STDMETHOD(AddLogString)(BSTR string);
public:
STDMETHOD(get_FileName)(BSTR* pVal);
STDMETHOD(put_FileName)(BSTR newVal);
protected:
CComBSTR m_bstrFileName;
HANDLE m_hFile;
};
OBJECT_ENTRY_AUTO(__uuidof(FileLogTarget), CFileLogTarget)
And the cpp file:
#include "stdafx.h"
#include "FileLogTarget.h"
HRESULT CFileLogTarget::OnDraw(ATL_DRAWINFO& di)
{
RECT& rc = *(RECT*)di.prcBounds;
HRGN hRgnOld = NULL;
if (GetClipRgn(di.hdcDraw, hRgnOld) != 1)
hRgnOld = NULL;
bool bSelectOldRgn = false;
HRGN hRgnNew = CreateRectRgn(rc.left, rc.top, rc.right, rc.bottom);
if (hRgnNew != NULL)
{
bSelectOldRgn = (SelectClipRgn(di.hdcDraw, hRgnNew) != ERROR);
}
HICON hIcon = ::LoadIcon(_AtlBaseModule.GetModuleInstance(),
MAKEINTRESOURCE(IDI_FILELOGTARGET));
DrawIcon(di.hdcDraw, rc.left, rc.top, hIcon);
if (bSelectOldRgn)
SelectClipRgn(di.hdcDraw, hRgnOld);
return S_OK;
}
STDMETHODIMP CFileLogTarget::AddLogString(BSTR string)
{
return S_OK;
}
STDMETHODIMP CFileLogTarget::get_FileName(BSTR* pVal)
{
m_bstrFileName.CopyTo(pVal);
return S_OK;
}
STDMETHODIMP CFileLogTarget::put_FileName(BSTR newVal)
{
m_bstrFileName = newVal;
return S_OK;
}
Cheers,
Daniel.
--
FIND A JOB YOU LOVE, AND YOU'LL NEVER HAVE TO WORK A DAY OF YOUR LIFE.
|
|
|
|
|
How can I get the information if my ActiveX component is running
in design mode (like in Visual BAsic) or in normal mode (running)?
Cheers,
Daniel.
--
FIND A JOB YOU LOVE, AND YOU'LL NEVER HAVE TO WORK A DAY OF YOUR LIFE.
|
|
|
|
|
Hi there !!
Use this API GetAmbientUserMode(BOOL &bVal)
This method retrieves DISPID_AMBIENT_USERMODE. This flag indicates whether the container is in run-mode, TRUE, or design-mode, FALSE.
Regards )
Abhishek Srivastava
Software Engg (VC++)
India ,Noida
Mobile no 9891492921
|
|
|
|
|
I develop an ActiveX component with Visual Stuido .NET with ATL7.
I want to draw a icon and for that I need the instance handle of
the component. In the old way I use _Module.GetModuleInstance() ,
but that doesn't work under ATL7 in VS.NET, because the object _Module
doesn't exist!
How can I get the instance handle under ATL7 in VS.NET?
Cheers,
Daniel.
--
FIND A JOB YOU LOVE, AND YOU'LL NEVER HAVE TO WORK A DAY OF YOUR LIFE.
|
|
|
|
|
the _Module thingie was splitted to several more classes - see MSDN article for CComModule Replacement Classes .
The HINSTANCE is now available as _AtlBaseModule.GetModuleInstance()
hope this helps
|
|
|
|
|
Hi,
I need to fire COM events from C# and the client to handle those events is in C++.
Following is the code snippet of the COM events and the dispinterface in C#.
[Guid("12854E47-AD44-4283-B503-1176CC827A49")]
public interface Foo1ComInterface
{
void FireRequest( string str );
}
[Guid("073D1766-7969-41fd-B794-8B65B0EADAF3")]
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface Foo1ComEvents
{
void FooEvent( string str );
}
[ Guid("22EFEC33-5B40-4417-AFF0-DE0C5B7C9E47")]
[ ClassInterface(ClassInterfaceType.None) ]
[ ComSourceInterfaces(typeof(Foo1ComEvents))]
public class BooHoo : Foo1ComInterface
{
.....
}
So far I have generated a tlb file using regasm and did a #import in the C++ code and am able to
call the FireRequest function as defined above from C++. But how should I handle the event
fired from the .NET side. Please help!!!
Thanks,
Abhi
|
|
|
|
|
I have an OLE Automation Server (its a local server that implements IDispatch), and I am trying to debug the code, I haven't developed this code. When I create a Debug EXE, it builds ok and if I execute the debug exe by double clicking, it works just fine. The problem is - if I run this debug exe in a debug environment through VC++ IDE, it causes a Assertion Failure in one of the MFC source file, from COleObjectFactory::RegisterAll() statement in my code.
Can anyone help me understand whats going on and what to do?
Thanks in advance.
|
|
|
|
|
I have the similar problem too. Dont have the solution yet.
Its only your debug version that gives the error b'cz its only the debug dlls that have the ASSERT code. In a release version this code is not present.
|
|
|
|
|
Hi Experts,
I want to make a mimic (graphic) editor in which images will be displayed dynamically on click of button, will be resized, moved and finally, they will be connected to database. For that purpose I want to use "Kodak image edit activex control" [WINNT,VC6.0]
basically,I’ve to make a graphics editor in which when i press a specified button a picture should be displayed on the dialog.that picture will be associated with a variable in a table of a database. when the value of that variable changes in the database another picture is pasted on the previous picture.i-e a picture of engine is normal when variable is 1...but when the value is 0 the color of engine changes to red.
note:
-pictures are moveable and resizable.
-there can be alot of pictures on the dialog at a time.
-value in the database changes automatically through another program.
i m using kodak Image Edit activeX control for this purpose..i add the control in the project and create it on runtime with the help of create function
Up till now I am able to create the control dynamically with the required image displayed on it which can also be flipped on click event with the help of EventSink_Map. I m sending u attachment as well. I want to know how the dynamically created control be made able to move and resize.
any help how to do that? m i going in the right direction? bcz previously i was doing all this with the help of CBitmapButton.(information on how i did that available on demand if anyone interested)
i also came to know that exactly the same problem is encountered to "asimatta" who sent the message on EXPERTS EXCHANGE website under the topic Languages\C++\ on 08/27/2003 with the title "ImageEdit activex control??" but i coudn't contact bcoz i m unable to buy points to send a message on Experts-Exchange.com
i m really grateful to Codeproject.com for providing such a great service free!!
plz help me !! Thanking u in anticipation
Regards,
nsaadyah
nsaadyah
|
|
|
|
|
Hi guys!
How can add a property of type IAnyComInterace* to my ActiveX component,
so that it will be visible in the object viewer of Visual Basic or Visual C#?
I have a ActiveX component IMyFirstActiveX and a second ActiveX component
IMySecondActiveX . I added a property NextLogTarget of type
IMyFirstActiveX to my IMySecondActiveX component. When I try
to assign the one ActiveX component to the property of the other ActiveX component in
the source code, like (VB sample)
secondActiveX.NextLogTarget = firstActiveX
it works fine, but when I try to assign it in the object viewer of Visual Basic it will
not exepted!
I have tried severl methods of the property, here are the IDL's:
[propget, id(1), helpstring("property NextLogTarget")]
HRESULT NextLogTarget([out, retval] IUnknown* *pVal);
[propput, id(1), helpstring("property NextLogTarget")]
HRESULT NextLogTarget([in] IUnknown* newVal);
[propget, id(1), helpstring("property NextLogTarget")]
HRESULT NextLogTarget([out, retval] IDispatch* *pVal);
[propput, id(1), helpstring("property NextLogTarget")]
HRESULT NextLogTarget([in] IDispatch* newVal);
[propget, id(1), helpstring("property NextLogTarget")]
HRESULT NextLogTarget([out, retval] VARIANT *pVal);
[propput, id(1), helpstring("property NextLogTarget")]
HRESULT NextLogTarget([in] VARIANT newVal);
How can I create a property of type of a COM interface, so that it work
in the object viewer of Visual Basic or Visual C#???
Cheers,
Daniel.
--
FIND A JOB YOU LOVE, AND YOU'LL NEVER HAVE TO WORK A DAY OF YOUR LIFE.
|
|
|
|
|
Hello,
I am hoping the DCOM gurus out there can help me with this one. Read on...
Background:
I have a COM+ component sitting on a W2K server.
I have a DCOM client that accesses the COM+ component.
For load balancing, I configure the DCOM client to go via Foundry ServerIron,
which is a load balancing and failover router.
Foundry routes it to one of the real W2K servers attached to it.
A DCOM connection pipe is established between the DCOM client and the W2K server (not Foundry.)
Subsequent calls from this client to the server bypass Foundry and use the cached
RPC binding handle.
This works fine for load balancing.
Problem:
When one of the servers behind Foundry hangs, I would like to clear
the cached RPC binding handle.
That way, any existing cached client connections are immediately terminated.
Since no cache mappings exist, the client will attempt to call the object using its
proxy settings, not the cache settings.
This will result in Foundry receiving the initial call and then transferring it to a working server.
Foundry is immediately notofied when the server hangs and so it knows not to route to the hanging server.
Question:
How can I clear the cache of mappings?
Is it possible to do something at the server side?
Is the RPC binding handle used by DCOM accessible?
Any and all responses will be gratefully accepted.
Thank you,
Sree
|
|
|
|
|
I used
#import "c:\winnt\system32\msxml.dll"
using namespace MSXML2;
for XML operations. One of the functions in my idl file is as follows.
[id(1), helpstring("method XmlEle")] HRESULT XmlEle([in] IXMLDOMNode **node);
The stuff is working fine in VC6 version. When I try to build the same in VC7, The following error is coming.
error C2872: 'IXMLDOMNode' : ambiguous symbol
could be 'd:\Program Files\Microsoft Visual Studio .NET\Vc7\PlatformSDK\Include\MsXml.h(536) : IXMLDOMNode'
or 'd:\Samples\XMLTest\Debug\msxml3.tlh(2398) : MSXML2::IXMLDOMNode'
I tried to use the "typelib" namespace MSXML2 to prifix IXMLDOMNode pointer, but it is not working. Can anybody help, how to solve this problem with IDL file?
|
|
|
|
|