473,386 Members | 1,764 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,386 software developers and data experts.

Unmanaged C functions and C++ classes wrapped in an assembly not as public but as managed private methods: how???

Hello,

in the last few days I've made my first few attempts at creating mixed C++
managed-unmanaged assemblies and looking aftwerwards with ILDASM at what is
visible in those assemblies from a managed point-of-view I've noticed that:

1) for each managed and unmanaged C function (not C++ classes) I get a
public managed static method (defined on a 'Global Functions' class) in the
generated assembly with an export name of the form xyz.FunctionName, where
xyz looks like a C++ mangled random name. As global methods of this 'Global
Functions' class also appear the main and _mainCRTStartup functions and any
other C library function that gets used inside the defined managed or
unmanaged C functions. In my simple sample applications, for example, I'm
using the printf C standard library function inside my definined functions
and when looking at the generated assembly with ILDASM I find a public
managed static method with the same name.

2) for each unmanaged C++ class I get a public managed structure (value
class) with no managed method visible. Including any C++ standard library
(such as iostrem, string, ecc.) in a project also adds a lot of managed
objects in the form of public managed structures (value classes). And this
happens even if none of the included C++ standard library classes gets used
in the defined managed/unmanaged C++ classes.

All of the above happens when compiling assemblies in release mode and
having specified to have the compiler produce NO debugging information.
Incredibly I discovered that even for release compiled assemblies some
debugging information still is produced and inserted into the assembly. Look
under "Project Properties -> C/C++ -> General" and set Debug Information
Format to Disabled to stop debug info from being placed into your
assemblies.

Now, what I'd like to do is:
(1) hide, if possible, any managed objects (value classes, arrays and
fields) created around my unmanaged C functions and C++ classes, but most of
all
(2) I'd like to have all these managed structures (value classes) created
around my managed/unmanaged C functions and unmanaged C++ classes to be
PRIVATE and NOT PUBLIC as their are created now.

I've tried defining as static both the managed and unmanaged C functions but
this does not seem to change anything. As for the C++ unmanaged classes it
seems that access specifiers (public, private, protected) may only be
applied to managed classes and so on this front I have not been able to do
anything.

Can anyone help me out???
Thx.
Bob Rock



Nov 17 '05 #1
3 4159
Note: I set follow-ups to m.p.d.languages.vc.
(2) I'd like to have all these managed structures (value classes) created
around my managed/unmanaged C functions and unmanaged C++ classes to be
PRIVATE and NOT PUBLIC as their are created now.
Compile with /d1PrivateNativeTypes for the value classes created mapping the
native types.

There is no alternative for the global functions since they are really
needed. Also no current tool (including ILASM) can call global functions )in
the CLR sense) exported from an assembly.
(1) hide, if possible, any managed objects (value classes, arrays and
fields) created around my unmanaged C functions and C++ classes, but most
of
all
If by "hide" you mean "not generate"then that isn't possible since these are
needed for the code to run. If you mean something else besides emitting them
as private, could you clarify?

Thanks.

Ronald Laeremans
Visual C++ team

"Bob Rock" <no***************************@hotmail.com> wrote in message
news:uU*************@tk2msftngp13.phx.gbl... Hello,

in the last few days I've made my first few attempts at creating mixed C++
managed-unmanaged assemblies and looking aftwerwards with ILDASM at what
is
visible in those assemblies from a managed point-of-view I've noticed
that:

1) for each managed and unmanaged C function (not C++ classes) I get a
public managed static method (defined on a 'Global Functions' class) in
the
generated assembly with an export name of the form xyz.FunctionName, where
xyz looks like a C++ mangled random name. As global methods of this
'Global
Functions' class also appear the main and _mainCRTStartup functions and
any
other C library function that gets used inside the defined managed or
unmanaged C functions. In my simple sample applications, for example, I'm
using the printf C standard library function inside my definined functions
and when looking at the generated assembly with ILDASM I find a public
managed static method with the same name.

2) for each unmanaged C++ class I get a public managed structure (value
class) with no managed method visible. Including any C++ standard library
(such as iostrem, string, ecc.) in a project also adds a lot of managed
objects in the form of public managed structures (value classes). And this
happens even if none of the included C++ standard library classes gets
used
in the defined managed/unmanaged C++ classes.

All of the above happens when compiling assemblies in release mode and
having specified to have the compiler produce NO debugging information.
Incredibly I discovered that even for release compiled assemblies some
debugging information still is produced and inserted into the assembly.
Look
under "Project Properties -> C/C++ -> General" and set Debug Information
Format to Disabled to stop debug info from being placed into your
assemblies.

Now, what I'd like to do is:
(1) hide, if possible, any managed objects (value classes, arrays and
fields) created around my unmanaged C functions and C++ classes, but most
of
all
(2) I'd like to have all these managed structures (value classes) created
around my managed/unmanaged C functions and unmanaged C++ classes to be
PRIVATE and NOT PUBLIC as their are created now.

I've tried defining as static both the managed and unmanaged C functions
but
this does not seem to change anything. As for the C++ unmanaged classes it
seems that access specifiers (public, private, protected) may only be
applied to managed classes and so on this front I have not been able to do
anything.

Can anyone help me out???
Thx.
Bob Rock




Nov 17 '05 #2
> Compile with /d1PrivateNativeTypes for the value classes created mapping
the
native types.

If by "hide" you mean "not generate"then that isn't possible since these are needed for the code to run. If you mean something else besides emitting them as private, could you clarify?

Ronald Laeremans
Visual C++ team


Ronald,

I tried compiling with the /d1PrivateNativeTypes. It compiles fine, and it
makes private the value classes created for the unmanaged classes,
unfortunately it does NOT make private the managed methods created around
the C functions (either managed or unmanaged). Is there any way to make them
private???
BTW, the /d1 option does not appear anywhere printing out all the modifiers
supported by the cl compiler.

Also, while for C standard library functions only the ones used produce a
corresponding managed wrapper in the assembly, for C++ stardard functions
the only inclusion (without using any of the exported classes) make an awful
lot of value classes appear in the assembly. Is there any way to prevent
this from happening???
Regards,
Bob Rock
Nov 17 '05 #3
Hi Bob,

I tried compiling with the /d1PrivateNativeTypes. It compiles fine, and it
makes private the value classes created for the unmanaged classes,
unfortunately it does NOT make private the managed methods created around
the C functions (either managed or unmanaged). Is there any way to make
them
private???
No, that is what I tried to describe by the following paragraph in my
original reply:

There is no alternative for the global functions since they are really
needed. Also no current tool (including ILASM) can call global functions )in
the CLR sense) exported from an assembly.
<<
BTW, the /d1 option does not appear anywhere printing out all the
modifiers
supported by the cl compiler.
Yes, the following link is the only available documentation:
http://support.microsoft.com/default...b;en-us;822330

Also, while for C standard library functions only the ones used produce a
corresponding managed wrapper in the assembly, for C++ stardard functions
the only inclusion (without using any of the exported classes) make an
awful
lot of value classes appear in the assembly. Is there any way to prevent
this from happening???

No there is not one that I know of. There should be no ill effects though.
Do you have a specific concern?

Ronald
Nov 17 '05 #4

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

1
by: Bob Rock | last post by:
Hello, in the last few days I've made my first few attempts at creating mixed C++ managed-unmanaged assemblies and looking aftwerwards with ILDASM at what is visible in those assemblies from a...
0
by: david chang via DotNetMonster.com | last post by:
Hi, guys I am trapped into a big trouble on how to use unmanaged class library code in a C# web application. Now, I am working on a project to develop a web interface for SPlus, a statistical...
4
by: Rachel Suddeth | last post by:
What is the difference between a managed/unmanaged resource, and how do you tell which is which? I'm trying to understand how to write some Dispose() methods, and we are supposed to put code that...
0
by: Vasco Lohrenscheit | last post by:
Hello, I have problems with pointers to unmanaged classes as parameters for virtual methods, and then overwriting the virtual methods in other assemblies: //GUI.dll #include...
2
by: Bob Rock | last post by:
Hello, in the last few days I've made my first few attempts at creating mixed C++ managed-unmanaged assemblies and looking afterwards with ILDASM at what is visible in those assemblies from a...
5
by: Andrew | last post by:
I want to use a managed c++ class from an unmanaged class. Here is my code: // *** Unmanaged Code // .h file class UnmanagedClass { public: // Other stuff here
3
by: _BNC | last post by:
I have an old C DLL that I want to access via C#. I'm doing this via an outer DLL that wraps the old C DLL in an unmanaged C++ class, which is in turn wrapped in a Managed C++ class. Both these...
13
by: bonk | last post by:
Hello, I am trying to create a dll that internally uses managed types but exposes a plain unmanaged interface. All the managed stuff shall be "wrapped out of sight". So that I would be able to...
6
by: marek | last post by:
Hello All, we are doing a quite a big project that contains at the lowest level an unmenaged c++ classes. Above it there are managed wrappers and at the top there are ASP.NET pages. Can anyone...
9
by: Amit Dedhia | last post by:
Hi All I have a VC++ 2005 MFC application with all classes defined as unmanaged classes. I want to write my application data in xml format. Since ADO.NET has buit in functions available for...
0
by: taylorcarr | last post by:
A Canon printer is a smart device known for being advanced, efficient, and reliable. It is designed for home, office, and hybrid workspace use and can also be used for a variety of purposes. However,...
0
by: Charles Arthur | last post by:
How do i turn on java script on a villaon, callus and itel keypad mobile phone
0
by: aa123db | last post by:
Variable and constants Use var or let for variables and const fror constants. Var foo ='bar'; Let foo ='bar';const baz ='bar'; Functions function $name$ ($parameters$) { } ...
0
by: ryjfgjl | last post by:
In our work, we often receive Excel tables with data in the same format. If we want to analyze these data, it can be difficult to analyze them because the data is spread across multiple Excel files...
0
BarryA
by: BarryA | last post by:
What are the essential steps and strategies outlined in the Data Structures and Algorithms (DSA) roadmap for aspiring data scientists? How can individuals effectively utilize this roadmap to progress...
1
by: nemocccc | last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
0
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However,...
0
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can...
0
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.