Solved

Clarification around #import attributes

Posted on 2009-04-15
8
314 Views
Last Modified: 2012-05-06
Given the following attributes that are commonly attached to the #import statement:

no_implementation
no_namespace
raw_interfaces_only
raw_native_types
named_guids

Can anyone clarify in what circumstances you would apply these attributes and those you wouldn't?  Many thanks.
0
Comment
Question by:Alburns
  • 2
  • 2
8 Comments
 
LVL 40

Expert Comment

by:evilrix
Comment Utility
C/C++ Preprocessor Reference
#import Attributes
http://msdn.microsoft.com/en-us/library/298h7faa.aspx

auto_rename
 Renames C++ reserved words by appending two underscores (__) to the variable name to resolve potential name conflicts.
 
auto_search
 Specifies that, when a type library is referenced with #import and itself references another type library, the compiler can do an implicit #import for the other type library.
 
embedded_idl
 Specifies that the type library is written to the .tlh file with the attribute-generated code preserved.
 
exclude (#import)
 Excludes items from the type library header files being generated.
 
high_method_prefix
 Specifies a prefix to be used in naming high-level properties and methods.
 
high_property_prefixes
 Specifies alternate prefixes for three property methods.
 
implementation_only
 Suppresses the generation of the .tlh header file (the primary header file).
 
include()
 Disables automatic exclusion.
 
inject_statement
 Inserts its argument as source text into the type-library header.
 
named_guids
 Tells the compiler to define and initialize GUID variables in old style, of the form LIBID_MyLib, CLSID_MyCoClass, IID_MyInterface, and DIID_MyDispInterface.
 
no_auto_exclude
 Disables automatic exclusion.
 
no_dual_interfaces
 Changes the way the compiler generates wrapper functions for dual interface methods.
 
no_implementation
 Suppresses the generation of the .tli header, which contains the implementations of the wrapper member functions.
 
no_namespace
 Specifies that the namespace name is not generated by the compiler.
 
no_registry
 Tells the compiler not to search the registry for type libraries.
 
no_search_namespace
 Has the same functionality as the no_namespace attribute but is used on type libraries that you use the #import directive with the auto_search attribute.
 
no_smart_pointers
 Suppresses the creation of smart pointers for all interfaces in the type library.
 
raw_dispinterfaces
 Tells the compiler to generate low-level wrapper functions for dispinterface methods and properties that call IDispatch::Invoke and return the HRESULT error code.
 
raw_interfaces_only
 Suppresses the generation of error-handling wrapper functions and property (C++) declarations that use those wrapper functions.
 
raw_method_prefix
 Specifies a different prefix to avoid name collisions.
 
raw_native_types
 Disables the use of COM support classes in the high-level wrapper functions and forces the use of low-level data types instead.
 
raw_property_prefixes
 Specifies alternate prefixes for three property methods.
 
rename (#import)
 Works around name collision problems.
 
rename_namespace
 Renames the namespace that contains the contents of the type library.
 
rename_search_namespace
 Has the same functionality as the rename_namespace attribute but is used on type libraries that you use the #import directive with the auto_search attribute.
 
tlbid
 Allows for loading libraries other than the primary type library.
 
0
 
LVL 40

Expert Comment

by:evilrix
Comment Utility
^^^incidentally, the above info is for your reference and does not suppose to answer your question :)
0
 

Author Comment

by:Alburns
Comment Utility
Thanks for the response.  Yes, I found this in MSDN but wasn't particularly helpful as I really needed some general advice on when you would apply these attributes and when you wouldn't.
0
 
LVL 49

Accepted Solution

by:
DanRollins earned 50 total points
Comment Utility
The #import handler in the complier does a lot of complex stuff.  Those attributes control some the less-used options.   A bit of experimentation would show, for instance, that raw_interfaces_only generates somewhat different code in the resulting .TLH header file.
Basically, if you don't know what the attribute does, you almost certainly don't need to use it.
0
 

Author Closing Comment

by:Alburns
Comment Utility
Many thanks for your reply.  I'll have a play around with these attributes and try to figure out what effect they have.
0

Featured Post

Maximize Your Threat Intelligence Reporting

Reporting is one of the most important and least talked about aspects of a world-class threat intelligence program. Here’s how to do it right.

Join & Write a Comment

Does the idea of dealing with bits scare or confuse you? Does it seem like a waste of time in an age where we all have terabytes of storage? If so, you're missing out on one of the core tools in every professional programmer's toolbox. Learn how to …
Since upgrading to Office 2013 or higher installing the Smart Indenter addin will fail. This article will explain how to install it so it will work regardless of the Office version installed.
This video teaches viewers about errors in exception handling.
The viewer will be introduced to the member functions push_back and pop_back of the vector class. The video will teach the difference between the two as well as how to use each one along with its functionality.

763 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

11 Experts available now in Live!

Get 1:1 Help Now