|
You need the Platform SDK installed. If you have it, check your VC Directories settings and make the PSDK install dir higher in the list than the vc98\include dir.
--Mike--
Just released - RightClick-Encrypt v1.4 - Adds fast & easy file encryption to Explorer
My really out-of-date homepage
Sonork-100.19012 Acid_Helm
|
|
|
|
|
Ahh thanks, that must've been the problem.
It's strange I never read the platform SDK was required. (Most things compiled fine without it). And I still have the impression it wasn't worth the 200mb download...
Thanks a lot for helping me out,
Kind regards,
Griffith
Everything you say will be misquoted, ripped out of context and used against you.
|
|
|
|
|
As a beginer of ATL Based Web Service programmer, I have some some questions about it:
1)Whether a Web Sevice can hold its state during its serving many clients, for I want keep some data structs among clients because these clients are collorating doing a certain work. If Web Service can has this virtue, how can I do, are there some documents about it?
2) can a web service client dynamicly locate the server without recompiling its source files When a Web Service provider changes its location on the internet? If it can, how can I do and are there some documents about it?
Please help me, thank you!
oyyx@sina.com
|
|
|
|
|
Hi,
I have a COM server without idl/tlb files.
Can anybody tell how to get/generate a tlb from an exe which doesn't have an idl? I understand without idl , it is not possible to generate tlb. This server supports ATL but doesnot have its own idl file.
|
|
|
|
|
- if you are using VC++7 and especially the latest ATL class wizards, you actually end up with interface declaration, class inheritance, and class implementation in the same non-idl file. That's what MS sees good as the new "Attribute-programming" style.
So you don't have a dedicated idl file, but it produces a standard tlb. No need to say I don't recommend this programming style sort of i-put-together-in-the-same-file, as it is a couple miles away from standard object modelling.
- by the way, if you need some idl format, you may just view and extract the content of the .tlb file using OleView (one of the tools with VC++).
And I swallow a small raisin.
|
|
|
|
|
Actually, I have a COM Server ( an .Exe) with no tlb. I have to create its assembly for which it needs a tlb file. If I try to add a reference directly in .Net environment, it reports an error that it is not a valid COM Component.
But In VC++6.0, I can do the createinstance of this server. So that means it is a com component. and also in the registry the information available indicate that it is an OUTPROC Server.
In VC++ 6.0, I can directly use the CLSID of this COMServer and communicate with the interfaces that it wraps.
Do u know if we have any means in C# using which we can invoke this server?
Confused
Rais
|
|
|
|
|
Get it clear : a COM server (.dll or .exe) comes with a .tlb, by definition. If not, no client application would be able to do successfully CoCreateInstance() on it.
What I guess is that in your case the .tlb file is embedded in the .exe file rather than separate, which is common (usually developers add a reference to the .tlb file generated at compile-time in the .rc resource file).
Have you tried to do "tlbimp <comservername.exe>" ? (from the MSDN doc, tlbimp does apply to any file with a tlb content inside).
MSDN doc.
There is no reason it doesn't work, and if you really need the .tlb file itself you may just as well use a resource file editor, and extract the type-library from it like you would with a picture.
Good luck!
And I swallow a small raisin.
|
|
|
|
|
Hi,
I have tried this too. but tlbIml gives an error that it is not a valid com server, though in the registry it maintains all the information like its ProgId, CLSID, server version, etc....
This server has been created using Custom interfaces.
In VC++ , I can develop a client that launches this server on doing CoCreateInstance(...).
Confused!!!
|
|
|
|
|
"Custom interfaces" is something you have invented.
You have COM interfaces, and that's all.
Post code snippets, at least SOME people MAY see and tell you;
MS quote (http://www.microsoft.com/ddk) : As of September 30, 2002, the Microsoft® Windows® 2000 DDK, the Microsoft Windows 98 DDK, and the Microsoft Windows NT® 4.0 DDK will no longer be available for purchase or download on this site. Support for development will ship at the same time as the Windows XP Service Pack 1 (SP1) release.
|
|
|
|
|
Utilize the OLEVIEW tool. OLEVIEW has an Explorer-like browser.
1. Open Object Classes - All Objects and attempt to find your COM server which probably will be listed by Prog ID. This assumes that your COM server is registered of course.
2. Open Type Libraries - To attempt to view the type library. This assumes that there is a type library and the type lib is registered.
Note that both attempts may require some insightfull searching but visits to OLEVIEW typically prove to be fruitful.
Typically (but not always) type libraries are embedded in com server modules. VBers only need to add a reference to the typelibrary via a browser in there IDE. The would need to know the library name or the location of the exe,dll,exe,tlb file. C++ people may obtain type-lib info, including headers for compilation, by using the #import directive. See your local MSDN for more information.
Example
#import "C:\Program Files\JMPS\bin\JmpsFramework.tlb" raw_interfaces_only, raw_native_types, no_namespace, named_guids
Note that this will generate JmpsFramework.tlh in my build directory.
Note that some COM servers do not has tlbs - they use standard marshalling or may be a simple com server that does not intend to marshall such as a simple learning exercise.
beamsack
|
|
|
|
|
The last line in your mail is of importance to me. I am using a COM server which does not have a tlb. Its using custom interfaces.
Can I use such a server using Automation clients like VB? If so, how?
In C#, in order to use a COM Component, the precondition is that it should have either a tlb or the server should carry this information within itself.
Only then, C# can create an assembly for this.
But since in my case I neither have a tlb, nor does the com server carries such information, I am unable to use it directly in C#.
Can you please look into it.
Thanks in advance
Rais
|
|
|
|
|
Rais,
I would say that you must have a type library in order to use the COM server. I believe standard marshalling is limited to C++. Header inforation is generated with the proxy/stub code. VB would have no idea of the types you would wish to use. I don't think automation will work without a tlb - you can test the possibility by creating a windows scripting host file and
Object myServer = _ <br />
CreateObject("MyProg.Identifier")<br />
myServer.MyMethodIHopeToCall You must have a proxy/stub dll if you don't have a type library. It may even work because typically marshalling is not required for inproc COM servers, but the OS may place your server in a "delegate process". Therefore it is highly recommended that some type of type library or proxy stub dll exist.
|
|
|
|
|
Hi,
I have an STL string pair (using a map) and every value is unique (just like the keys are unique). Sometimes, I need to "flip" the keys and the values, so the keys would become the values and the values become the keys.
Is there a built-in function that would allow me to do this without having to create a new map and do this through a loop?
Thanks!
|
|
|
|
|
Hi Chris,
I happen to be in the process of writing an STL-like bidirectional map, i.e. one for which you can lookup by key and by value. As my workload does not allow me to finish the thing, it'll be quite a while till I finally get to post it to CP. Nevertheless, if you're curious I can send to you what I have right now (it's already pretty functional, and beta testers are always great ).
Joaquín M López Muñoz
Telefónica, Investigación y Desarrollo
|
|
|
|
|
I've been looking for this for several years now. At one point I was going to write one myself, but I'm not a stl guru. Please email me this if you can at drescherjm@hotmail.com
Thanks,
John M. Drescher
|
|
|
|
|
I am looking forward to such an article. In my applications I have been using two maps depending on what keys I needed. I am also intereseted in becoming your beta tester of course .
Best regards,
Alexandru Savescu
|
|
|
|
|
Chris Hambleton wrote:
Is there a built-in function that would allow me to do this without having to create a new map and do this through a loop?
Nope. A map is normally a red-black tree implementation, so by swapping a key-value pair, you've essentially invalidated the location of that node in the tree.
You can always remove the key-value pair first and then add the swapped values back in the tree. (More overhead, less memory usage of course.)
Brandon
|
|
|
|
|
Humm, perhaps you could use a multimap, since insertion and remotion from the multimap doesn't invalidate the iterator(if I'm not mistaken here).
Cheers,
Joao Vaz
A Programming Language is a tool that has profound influence on our thinking habits -The late giant Edsger Dijkstra 1930 - 2002
And if your dream is to care for your family, to put food on the table, to provide them with an education and a good home, then maybe suffering through an endless, pointless, boring job will seem to have purpose. And you will realize how even a rock can change the world, simply by remaining obstinately stationary. -
|
|
|
|
|
Well, until Joaquin bidirectional map comes out I suggest you use two maps and use one of them depending on what the keys are. This is what I have been doing.
Best regards,
Alexandru Savescu
|
|
|
|
|
Why not store as the value both they value and the key
struct
{
int key;
int value;
} KeyValuePair;
std::map<int, KeyValuePair> mymap;
Then you can search through the map (although not as fast) by eithe the key or value.
Todd Smith
|
|
|
|
|
You can already do a linear search for values. Why add the key to the data set?
--
Please state the nature of your medical emergency.
|
|
|
|
|
You can always to this:
template <typename key_t, typename value_t>
class bidir_map {
typedef map<key_t, value_t> key_to_value_map;
typedef map<value_t, key_t> value_to_key_map;
key_to_value_map key_map;
value_to_key_map value_map;
};
Although, this may not be the most efficient implementation in terms of size. But if your collections is small, then this may be a cheap solution.
--
Please state the nature of your medical emergency.
|
|
|
|
|
Hello guys,
I have an ATL project with a COM object called IJeremy it has a method called SetMsg which takes an IMessage* as an [in] param.
This object fails to compile - it tells me:
error MIDL2025 : syntax error : expecting a type specification near "IMessage"
What is the best way around to get it to work?
I have tried importing CDOSys.Idl from my IDL, however it does not compile because of many errors.
Has anyone done this before?
Thanks for the help,
Jeremy
Jeremy Pullicino
Professional C++ Developer
Done any hacking lately?
|
|
|
|
|
Have you tried inserting a forward declaration for IMessage ?
Joaquín M López Muñoz
Telefónica, Investigación y Desarrollo
|
|
|
|
|
Yes, I did that, however, I get another error when I do that.
error MIDL2011 : unresolved type declaration : IMessage [ Parameter 'pIMessage' of Procedure 'Submit' ( Interface 'ISubmitMsg2' ) ]
'Submit' is my method
'ISubmitMsg2' is my interface
Thanks,
Jeremy.
Jeremy Pullicino
Professional C++ Developer
Done any hacking lately?
|
|
|
|