|
Do not repost the same message in different forum. You send this message in vc++ forum and ATL forum as well.
Yes U Can ...If U Can ,Dream it , U can do it ...ICAN
|
|
|
|
|
I had been interviewed with a comp .. during course of interview guy asked me question like.
1)How COM and DCOM differ on code level.
2)and what are the advantages of using COM over DCOM
can somebody please explain these..
thanks
vikas da
|
|
|
|
|
In the code level they can be exactly the same.
If you have a COM EXE, you can run the dcomcnfg tool and configure it for DCOM.
DCOM is COM with some permissions and access control.
|
|
|
|
|
See here[^].
The funniest thing about this particular signature is that by the time you realise it doesn't say anything it's too late to stop reading it.
My latest tip/trick
|
|
|
|
|
DCOM (Distributed COM) is nothing but COM over network.
"Don't confuse experts with facts" - Eric_V
|
|
|
|
|
In my application Iam calling a method in C# in the fallowing way. It is a com method.
Array ar = iFuncs22.GetCheckEntriesNew();parameter to function is an IID.purpose of this function is to get all the properties of a structure named "Entry" into an array. Implementation of function GetCheckEntriesNew()is in VC++ like
STDMETHODIMP CARadApi::GetCheckEntriesNew(long CheckId, LPSAFEARRAY *pRetVal)
In the implementation part everything is fine except in the call
hr = SafeArrayPutElement(psaEntriesNew, &index, &ce1);
here ce1 is a "Entry" strucure which is filled properly.But while putting ce1 values into Array using "SafeArrayPutElement" values are changing. some random values are appering. Please let me know the solution. Thanks in Advance
|
|
|
|
|
Are you sure you don't have memory errors somewhere in your program? I've used COM's SafeArrayPutElement without a problem, but I have seen very weird errors like those you describe when applications have memory errors. This is often due to someone forgetting that Excel often passes unitialized values to dlls.
|
|
|
|
|
Hello,
I am using DIA SDK for extracting user defined complex types(just I used in my C++ code). I don't know all my types(used in code) before extracting from DIA SDK with names and members(data members& functions).
It shows everything, I mean all those user defined types which I don't need at all(i.e kernel types and enums & structs). I only want to enumerate those which are strictly used in my code(i.e in Dll/EXE in any format).
Is there is any way out at all by which we can restrict those unwanted (Kernel source types or MSFT specific source code) types to appear?
Regards
Usman
|
|
|
|
|
glitteringsound wrote: It shows everything
What does this mean, what is it that does the showing? You need to explain your problem a bit better if you want a suggestion to help you.
Just say 'NO' to evaluated arguments for diadic functions! Ash
|
|
|
|
|
I statted completely..
Rephrasing..It shows every user defined type that's not used or declare inside my code. I mean If I have declared and use "MyClass" as class in my dll/exe then it should enumerate only this.
It enumerates all those UDTs(User Defined Types)which 's not used or declared in my binary(dll/exe).Those comes from kernel modules and libraries. As we know that every program implicitely linked with some kernel imports(i.e kernel32.lib,user32.lib, gdi32.lib, winspool.lib ,comdlg32.lib....).
I only need strictly those user defined types those I declared inside my source code.For this I can give or hardcode that user defined type to which I want to enumerate. But this is not the solution of the problem. Some I don't know earlier the name of type used in my source code. In that case I need list of all of those types which I used or declared in my source code.
|
|
|
|
|
glitteringsound wrote: It shows every user defined type
Once again what do you mean by 'It' here. What exactly are you doing (or is something else doing) that shows whatever it is that you do not want to see. You also mention enumeration, again who or what is doing the enumerating and what are they enumerating. Sorry but I am very confused.
Just say 'NO' to evaluated arguments for diadic functions! Ash
|
|
|
|
|
DIA SDK is the API available by Microsoft under C:\Program Files\Microsoft Visual Studio 10.0\DIA SDK\...
It always gives you the debugging information 2 or 3 times more than that of Dbghelp and DbgEng etc. It enumerates pdbs and allows the users to extract information like
1 - Types(names) & base class details.
2 - Members(Their names and full signature details, parameter offsets and methods RVA)
3 - Type data members.
and lot more what ever you required.
My problem is that yes I want to enumerate all these things. But basically my problem is that I don't want the details(which I mentioned above ) of all those types which are not defined in my code.What It does now , it starts from kernel modules (Dll's) , enumerates the details(i.e types , method associated with that type and so on..) and trail down to the end of the user defined types(classes',structs and enums).
I only want my types (which are strictly defined in my code) to be enlist. I don't want all kernel related types.i.e contained inside (MSCVP100.dll,KERNEL32.dll,User32.dll,Ole32.dll,OleAut32.dll).
If still any confusion is there let me know then..
|
|
|
|
|
I have not used DIA but looking at the documentation there does not seem to be an obvious solution to your problem. I suspect part of the problem is the extra information that is added to the PDB when you include a header file that defines Windows functions; everything is included in the PDB even if it is not directly referenced in the final .exe file. There seem to be lots of pointers in the section on Symbols and Symbol Tags but no direct suggestion relevant to your question. Since this is a rather specialised subject you may be better trying one of the Microsoft forums that deal with the subject.
Just say 'NO' to evaluated arguments for diadic functions! Ash
|
|
|
|
|
Hello,
Can we calculate/extract Virtual Table address some how from DIA SDK?
Regards,
Usman
|
|
|
|
|
The original pointer you receive on CoCreateInstance()[^] points to the vtbl. However since this is an internal COM object you cannot rely on any of its contents if accessed other than through the proper COM calls.
Just say 'NO' to evaluated arguments for diadic functions! Ash
|
|
|
|
|
I have Simple Win32 type which have some virtual functions. I want access the base pointer of virtual table. Some how If I can pass type and it returns the existing vtable's start address...?
|
|
|
|
|
I am afraid I am a bit confused now. As I said before the vtbl pointer of a COM object is returned to the caller from CoCreatInstance() . I don't understand what this has to do with virtual functions in your Win32 application; perhaps you could clarify.
Just say 'NO' to evaluated arguments for diadic functions! Ash
|
|
|
|
|
Let me clarify now.!
Forget about COM.
I have Win32 Type say.. (MyStruct) and it contains some virtual functions. Now this type would contains an extra member(hidden) i.e vpVtable that's pointing to some vtable's base address which this type contains because it has some virtual functions.
Right...?
Now I want to access some how this vtable's base address or some how the rva to this vtable's address. I have read the documentation of DIA SDK. and it gives you every information what pdb file contains. Now I am giving the pdb file of that binary(WIN32 Dll/EXE) which contains a type(i.e struct namely MyStruct) which in turns contains some virtual functions.
So If some how I can point "MyStruct" and can get its contained vtable's base address.
If still any confusion in understanding the context, do let me know then..
|
|
|
|
|
OK, I think I understand your problem. However, I'm afraid I have never looked into PDB file so cannot offer any suggestions on that. You may find this article[^] useful as he goes into the structure of vtables in C and how they match with C++ classes.
Just say 'NO' to evaluated arguments for diadic functions! Ash
|
|
|
|
|
I support an application that is a combination of vb6 and .net components. I am trying to replace a vb6 dll with an equivalent in c# but I've got stuck on how to query the properties of a com object that is passed as Object.
The vb6 form instantiates a .net object through COM and then passes a reference to itself but as an object, not a specific type:
public bool Init(ref ADOConn.STConnector db, object MREForm, string user)
In VB i could query any public variables on the form for example:
dim loc as string = MREForm.Location
If I use reflection, all I get is the properties of the object type, not the underlying COM type. How can I do the same thing in C#?
Thanks for any help on this.
|
|
|
|
|
In C#, you just use a type cast.
IMyInterface myInt = (IMyInterface)MREForm;
|
|
|
|
|
Thanks for the answer, but in order to cast, you need to have a type to cast to. In this case, the variable being passed (as an object), is actually a vb6 form, and to get the type means that I need a reference to the vb6 dll, and the form needs to be an exported type.
If I was using VB.net (and I have tried this), I can just reference properties of the object without casting, or creating a reference, presumably using late binding to query the object at runtime "under the bonnet" - this is all taken care of for the VB developer.
My question is: how can I do the same thing in c#?
To clarify the sample code:
VB6 code:
dim obj as MREPlugin32.MREPlugin<br />
...<br />
set obj = new MREPlugin32.MREPlugin<br />
obj.Init(Me)<br />
VB.net code (this works):
public Sub Init(obj as Object)<br />
dim location as string = obj.Location<br />
End Sub<br />
So how can I do this?
C# Code:
public Void Init(object obj)<br />
{<br />
string location = obj.Location;
}<br />
|
|
|
|
|
Hello cable beach,
1.
>> So how can I do this?
>> C# Code:
>> public Void Init(object obj)
>> {
>> string location = obj.Location; // Somehow, without any external references.
>> }
1.1 Unfortunately, this syntax style (indicating a dynamic call to the Location property of a late-bound object) is not possible in C#.
1.2 To make a late bound call to an imported COM object's method or property, you must use the static Type.InvokeMember() function.
1.3 Here are links to 2 useful short articles explaining this :
Calling a COM Component From C# (Late Binding)
http://www.c-sharpcorner.com/UploadFile/psingh/CallingCOMComponentFromCSharp12022005231615PM/CallingCOMComponentFromCSharp.aspx[^]
Late Binding with Reflection
http://www.c-sharpcorner.com/UploadFile/samhaidar/LateBindingWithReflection09122005053810AM/LateBindingWithReflection.aspx[^]
2.
>> VB.net code (this works):
>> public Sub Init(obj as Object)
>> dim location as string = obj.Location
>> End Sub
2.1 Although I do not know enough about VB.NET, I am not surprised that the above syntactic expression is possible. It is likely designed to be so since this is definitely possible in VB6.0.
2.2 I believe that the restriction in C# is probably due to strict type checking which is enforced in languages like C++.
- Bio.
|
|
|
|
|
Yeah, I tried using reflection, but this still requires you have a reference to the underlying type.
In the end I just switched the project to VB.net, and it works. I still find it surprising that there is something vb.net can do that c# can't.
Anyway, thanks for your input.
|
|
|
|
|
Hi all.
I develop a shell extension. My problem is that after registering it, right click on a file is needed at windows start up to explorer load my shell.
It's type is context menu. Is there any type that not need right clicking on a file?
If you know a solution, please share with me.
Thanks a'lot.
|
|
|
|