|
RevathiRamakumar wrote: And I got the error message ...A null pointer reference was passed to stub...
Oops... Sorry about that, must have been a temporary brain hiccup.
The error makes perfectly sense if you think about it, how is the caller suppose to get the result....
Of course it should be:
BSTR bstrTheBeat = NULL;
hr = pGetStatus->GetBeat( &bstrTheBeat );
if( SUCCEEDED( hr ) )
{
::SysFreeString( bstrTheBeat );
bstrTheBeat = NULL;
}
"It's supposed to be hard, otherwise anybody could do it!" - selfquote "High speed never compensates for wrong direction!" - unknown
|
|
|
|
|
Thank u...
NO It doesn't work...
error C2664: 'raw_GetBeat' : cannot convert parameter 1 from 'unsigned short *** ' to 'unsigned short ** '
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast.
So, I tried this one..
hr1 = pGetStatus->raw_GetBeat((BSTR*)&pbstrTheBeat);
But, still I get ACCESS DENIED...
|
|
|
|
|
RevathiRamakumar wrote: cannot convert parameter 1 from 'unsigned short *** ' to 'unsigned short **
Read my code snippet again. The type has changed from BSTR* to a simple BSTR compared to the code snippet in my previous post.
"It's supposed to be hard, otherwise anybody could do it!" - selfquote "High speed never compensates for wrong direction!" - unknown
|
|
|
|
|
Ho extremely sorry...Now no errors..But y is the access denied...sorry to bug u alot..Thank u..
|
|
|
|
|
Is there something to do with the firewall settings...I'm not sure if firewall settings has to something with COM..Thank u in advance..
|
|
|
|
|
RevathiRamakumar wrote: Is there something to do with the firewall settings...I'm not sure if firewall settings has to something with COM.
If you would be using DCOM, Distributed COM, where the server and client resides on different machines, a network firewall may present some troubles.
Some firewalls, such as Comodo, could prevent the client process from accessing the server process or ask the user for action.
However, I very much doubt any firewall would cause any troubles in your case since you're able to successfully call other functions of the same interface of the same server.
"It's supposed to be hard, otherwise anybody could do it!" - selfquote "High speed never compensates for wrong direction!" - unknown
|
|
|
|
|
RevathiRamakumar wrote: Ho extremely sorry...
No worries, you were not the only one who made a mistake.
RevathiRamakumar wrote: Now no errors..
Good.
RevathiRamakumar wrote: But y is the access denied
What are you trying to do when do you experience this?
Have you tried to debug it and step though the code?
Does the BSTR variable point to a valid string?
What does the source code look like where you get this error?
"It's supposed to be hard, otherwise anybody could do it!" - selfquote "High speed never compensates for wrong direction!" - unknown
|
|
|
|
|
Thanks for ur reply..Actually I couldn't call any of the methods in the interface..Whenever I try to call any of these methods I get Access denied exception...
HRESULT hr1;
hr1 = pGetStatus->raw_Get_Beat(&pbstrTheBeat);//This raises Access Denied
/*BSTR does not point to a valid String..It shows 0xc000000 */
if( SUCCEEDED( hr1 ) )
{
AfxMessageBox("Text");
}
else
{
_com_error e(hr1);
AfxMessageBox(e.ErrorMessage());
}
}
catch(_com_error e)
{
AfxMessageBox(e.ErrorMessage(),MB_ICONSTOP);//This tells me ACCESS IS DENIED
}
I tried to debug..Actually the purpose is that I need to get the CPU and Memory usuage of a Server machine which is remote..I wanted to try it on a local machine first and then to implement on a remote machine..But, in the local machine itself I get Access Denied..Can u please tell me how to solve this...Thank u in advance...
|
|
|
|
|
RevathiRamakumar wrote: Actually I couldn't call any of the methods in the interface..Whenever I try to call any of these methods I get Access denied exception...
I assumed you were able to call the two other functions successfully since you wrote
RevathiRamakumar wrote: when I try to call the third method(returns the BSTR srting) I get Access Denied error.
in your original post.
I suggest you unregister the server, rebuild the complete server and register it.
Clean up the client project, and especially the files generated when #importing the typelib of the server.
Rebuild the client, debug it and verify that the server can be successfully created, i.e. make sure that the HRESULT returned from ::CoCreateInstance() equals zero and your interface pointer points to a valid address.
Also make sure you have the named_guids attribute when #importing since this will declare the CLSID and IIDs correctly for you.
"It's supposed to be hard, otherwise anybody could do it!" - selfquote "High speed never compensates for wrong direction!" - unknown
|
|
|
|
|
Thanks for the reply Roger..I tried the way u suggested.. I unregistered the server ,built it again and then registered it..I also cleaned up the client and tried to built it again..HRESULT Of ::CoCreateInstance() returned 0 and the interface pointer points a valid address..But, again Access Denied while calling the server method...
|
|
|
|
|
RevathiRamakumar wrote: HRESULT Of ::CoCreateInstance() returned 0 and the interface pointer points a valid address..But, again Access Denied while calling the server method...
That's odd...
If you're able to successfully create the server and get a valid pointer to the interface, I cannot see how you could get an access violation making the call.
It feels like there's some kind of mismatch between the server, typelib and client.
If you have changed from an IDispatch-derived interface to an IUnknown-derived, the virtual table the client tries to use may be out of sync. That's why I suggested that you should unregister all and rebuild from scratch.
How is your interface declared in the IDL-file?
It should be something like this:
[
object,
uuid( xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx ),
oleautomation,
helpstring( "IGetStatus interface" ),
]
interface IGetStatus : IUnknown
{
HRESULT GetBeat( [out] BSTR* pbstrTheBeat );
HRESULT GetCPU( [out] unsigned long* pulCpuLoad );
HRESULT GetMemory( [out] unsigned long* pulMemory );
};
Also make sure in the client that the IGetStatus interface, declared in the complier generated header file, only contains QueryInterface() , AddRef() , Release() , GetBeat() , GetCPU() and GetMemory() .
Try using one of the other interface functions since it's more straight forward with integer values and you don't have to worry about string obscurities.
When you get that working you can continue with IGetStatus::GetBeat() .
"It's supposed to be hard, otherwise anybody could do it!" - selfquote "High speed never compensates for wrong direction!" - unknown
|
|
|
|
|
Thanks for ur reply...When I tried calling AddRef() It worked fine...
ULONG i = pGetStatus->AddRef();//i=2
But, when the other methods are being called, it gives me access denied error..K I'll keep trying ..Thank u...
|
|
|
|
|
Hi Mr.Roger I got it working after changing the Authentication level to NONE in dcomcnfg...Initially it was dEFAULT after changing it to NONE its working fine..
Thank u...
|
|
|
|
|
try
{
_bstr_t str1 ;
str1 = pGetStatus->GetBeat();
char* Text = str1;
AfxMessageBox(Text);
UINT CPU_Info = pGetStatus->Get_CPU();
int Memory_Info = pGetStatus->Get_Memory();
}
With best wishes,
Vita
|
|
|
|
|
Thank u....Ya I tried them but ,getting Access Denied Error..
|
|
|
|
|
Hi.. Now I could call the methods... I changed the Authentication level as NONE in the DCOM configuration... Its working fine..
Thank u ...
modified on Wednesday, April 15, 2009 6:28 AM
|
|
|
|
|
Hi,
I accidently took out the Configuration Permissions on the Microsoft Word Document DCOM object on a Windows Server 2003, and now I cannot edit anything on any of the property pages, which means I have no way to get the permissions back in there unless I do it programmatically. I have searched everywhere, and occasionally something comes up that can modify permissions, but it's always for Launch and Activation, and Access, never for Configuration. This elusive set of permissions seems to live somewhere else in the nether regions of DCOM, and I cannot find it. Does anyone have any ideas?
Thanks!
Sean
|
|
|
|
|
You could try and run the Office installation again.
«_Superman_»
I love work. It gives me something to do between weekends.
|
|
|
|
|
Thanks, but it simply looks for the existence of the DCOM object, but doesn't change its permissions.
See solution below tho!
|
|
|
|
|
I found my own solution!
You can read the full doc here:
http://www.tech-archive.net/Archive/Development/microsoft.public.win32.programmer.ole/2005-06/msg00138.html[^]
Essentially, the configuration permissions are just a logical view of the registry ACL on the AppId key. So Launch and Activation permissions are serialized security descriptors stored in their respective registry value, whereas Configuration permissions are just read from the AppID key directly. So repairing the permissions is simply a matter of adding them back to the registry key itself!
Sean
|
|
|
|
|
Hi -- I am reading a Motorola scanner via a PC serial port using a standard Motorola supplied VB program. The problem is that every time the PC is rebooted, two buttons have to be pressed on the VB application program to enable the connection between the application and the scanner.
Would someone be interested in helping us modify the application so that this connection is established automatically? Willing to pay for help.
Thanks.
|
|
|
|
|
COM here stands for Component Object Model and not a serial port.
You should put the VB application in the Run registry key so that it starts up automatically after a reboot and then call the button click routines in the Form load event so that it connects automatically to the scanner.
«_Superman_»
I love work. It gives me something to do between weekends.
|
|
|
|
|
Hi all,
I created a ActiveX(C# and .NET).
now,i've register it in my computer. and use <object> tag in html file.
when i open the IE and specify the html address, what's UsageMode? Designtime? Runtime?
how to differentiate this two mode?
i implement LicenseProvider in ActiveX,and write code in GetLicense procedure.
if (context.UsageMode == LicenseUsageMode.Designtime)
{
System.Windows.Forms.MessageBox.Show("Designtime");
}
if (context.UsageMode == LicenseUsageMode.Runtime)
{
System.Windows.Forms.MessageBox.Show("Runtime");
}
but, it always show Designtime.
|
|
|
|
|
I’m getting a assertion in below code. What could be the prolbem.
bool AxControl::CreateOleClientInstance(CLSID clsidActual)
{
clsid = clsidActual;
AfxEnableControlContainer();
pDoc = new COCXDocument();
pDoc->OnNewDocument();
pClient = new COCXClientItem(pDoc);
CoInitialize(NULL);
pClient->CreateNewItem(clsidActual);
pClient->m_lpObject->QueryInterface(
IID_IDispatch, (void**)&m_lpObjectdispatch);
return true;
}
VIBIN
"Fool's run away,where angle's fear to tread"
|
|
|
|
|
...you know, I googled COCXClientItem, and there WAS NOTHING.
What is it? Did you write the code? Derive it from some other class that is publicly documented?
Assertions usually crash the application (by design), so I assume that the code you displayed above actually compiled. That means that COCXClientItem must be in one of your header files, or would have generated a compiler error.
I would suspect that the clsidActual variable did not pass some simple error checking test (for instance, checking for an invalid value). You could do that yourself before you passed it to COCXClientItem->CreateNewItem ().
This most closely resembles your code example: COleClientItem::CreateNewItem[^], except that it has four function parameters, whereas yours has only one.
|
|
|
|