Is it legal to declare a static instance of an object compiled in a "No
CLR support" .obj?
I have the next .cpp, in which I mix definition of CTest and declarion
of the static var in the same .cpp to make the example shorter :
class CTest
{
public:
CTest();
~CTest(); // <- Important to reproduce
};
CTest::CTest()
{
}
CTest::~CTest()
{
}
static CTest s_CTest; // Here!!: _CrtIsValidHeap Pointer
I also have 2 other additional .cpp in the project: AssemblyInfo.cp p
and Main.cpp, both compiled with the /clr switch.
My problem arises when calling the unmanaged static constructor... it
calls the unmanaged crt _atexit function in order to subscribe the
destructor to the list of functions that get called at program exit,
but it seems like the CRT is not initialized yet!!
Any ideas? 6 3342
Hello,
I find this problem a few days ago.
And I know only one resolution for this problem:
Every .cpp file which contains global variable of type with non-trivial
constructor/destructor must be compiled with /clr switch.
In my opinion, this is a compiler bug.
Best regards,
DS
shu wrote: Is it legal to declare a static instance of an object compiled in a "No CLR support" .obj?
I have the next .cpp, in which I mix definition of CTest and declarion of the static var in the same .cpp to make the example shorter :
class CTest { public: CTest(); ~CTest(); // <- Important to reproduce };
CTest::CTest() { }
CTest::~CTest() { }
static CTest s_CTest; // Here!!: _CrtIsValidHeap Pointer
I also have 2 other additional .cpp in the project: AssemblyInfo.cp p and Main.cpp, both compiled with the /clr switch.
My problem arises when calling the unmanaged static constructor... it calls the unmanaged crt _atexit function in order to subscribe the destructor to the list of functions that get called at program exit, but it seems like the CRT is not initialized yet!!
Any ideas?
<ds****@gmail.c om> wrote Hello,
I find this problem a few days ago. And I know only one resolution for this problem:
Every .cpp file which contains global variable of type with non-trivial constructor/destructor must be compiled with /clr switch.
In my opinion, this is a compiler bug.
I think we've had that one before. It's really an issue with CRT
initialization. The initialization code expects the constructors
to be encoded (with Windows EncodePointer function), which
they are not. Therefore the code passes a bogus pointer to
realloc, which asserts in debug mode. Usually, the CRT registers
an early init function which does the encoding (IIRC it's
pre_c_init). You'll notice that this function is not present
in managed exe's. I suggest you open a bug at http://lab.msdn.microsoft.com/productfeedback/
BTW: While it might sound odd at first, that a global object has
a destructor effectively requires initialization code.
The initialization code will register the object for destruction
by calling atexit (or a similar function).
-hg
"Holger Grund" <ho**********@r emove.ix-n.net> wrote I think we've had that one before. It's really an issue with CRT initialization. The initialization code expects the constructors to be encoded (with Windows EncodePointer function), which they are not. Therefore the code passes a bogus pointer to realloc, which asserts in debug mode. Usually, the CRT registers an early init function which does the encoding (IIRC it's pre_c_init). You'll notice that this function is not present in managed exe's. I suggest you open a bug at
My bad! Looking at my notes, it seemed to be a bug in the
project wizard. The wizard sets the linker option /ENTRY:main
which bypasses CRT initialization.
Can you try the following in your project:
- Project Settings/Configuration Properties/Linker/System
Clear SubSystem (select "<inherit from ...>" which should
result in "not set").
- Project Settings/Configuration Properties/Linker/Advanced
Clear entrypoint (again by selecting "<inherit from ...>")
Does this work for you?
-hg
Hello, Holger,
Yes, this work fine. BUT, this makes our application as a console
(console windows opened on start up and this is really BAD). Problem
with native globale variable occured only with Windows Forms projects.
See also http://lab.msdn.microsoft.com/produc...6-2f4f1af866d5
You can find my test solution attached to this feedback.
Best regards,
DS
Holger Grund wrote: "Holger Grund" <ho**********@r emove.ix-n.net> wrote
I think we've had that one before. It's really an issue with CRT initialization. The initialization code expects the constructors to be encoded (with Windows EncodePointer function), which they are not. Therefore the code passes a bogus pointer to realloc, which asserts in debug mode. Usually, the CRT registers an early init function which does the encoding (IIRC it's pre_c_init). You'll notice that this function is not present in managed exe's. I suggest you open a bug at My bad! Looking at my notes, it seemed to be a bug in the project wizard. The wizard sets the linker option /ENTRY:main which bypasses CRT initialization.
Can you try the following in your project:
- Project Settings/Configuration Properties/Linker/System Clear SubSystem (select "<inherit from ...>" which should result in "not set"). - Project Settings/Configuration Properties/Linker/Advanced Clear entrypoint (again by selecting "<inherit from ...>")
Does this work for you?
-hg
Hello,
I found new way to resolve this problem:
"- Project Settings/Configuration Properties/Linker/Advanced
Clear entrypoint (again by selecting "<inherit from ...>") " (as Holger
wrote)
+
add the following code near main() definition:
int main(array<Syst em::String ^> ^args)
{
<...>
}
int __stdcall WinMain(int hInstance, int hPrevInstance, void
*lpCmdLine, int nShowCmd)
{
return main(gcnew array<System::S tring^>(0));
}
Code doesn't contain initialization of the args parameter and need to
be extended.
But, in my opinion, this is right way (no console shown).
Hello,
I found new way to resolve this problem :-) :
Just change
/entry:main
to
/entry:?mainCRTS tartupStrArray@ @$$FYMHP$01AP$A AVString@System @@@Z
No other changes need.
Best regards,
DS This thread has been closed and replies have been disabled. Please start a new discussion. Similar topics |
by: Adam McKee |
last post by:
We are using Visual Studio.NET 2003 in our project with .NET framework
1.1. One of our libraries is a mixed-mode dll assembly consisting of
one managed C++ library, and several unmanaged C++ libraries. We are
using managed C++ as a bridge between managed .NET code and unmanaged
C++ code, which I'm sure is a fairly common practice. The managed C++
library is compiled with /CLR whereas all other libraries are compiled
without /CLR because...
|
by: mflanagan |
last post by:
I have unmanaged C++ program that will load a managed C++ dll and then
call a function in that dll. The managed C++ routine will call some C#
routines. The unmanaged C++ main program will make these calls (to
the managed C++ dll) many times, from many different threads. Each
thread will do a LoadLibrary, call one C++ routine in the managed dll,
and upon return, unload the library and exit.
I'm concerned about class variables (static)...
|
by: |
last post by:
I am stuck in a situation and I do believe that this should work, but it
doesn't.
I have a unmanaged dll, that uses MFC. This works great.
Now I recompile the unmanaged dll so it contains mixed mode
managed/unmanaged code, but only use unmanaged code, but this gives a error
the moment I want to display a MFC dialog box: Something like unreferenced
object,... during runtime.
|
by: Steve |
last post by:
I have former VC++ 6.0 application which was ported to .NET.
Now we continue to develop this app under VS.NET. The app
now contains both managed and unmanaged classes.
Now I have a problem with usage of resources in managed classes.
For example I want to display warning message and want to load
that warning message from the resource file. The problem is that
in this mixed managed/unmanaged project I don't have pure managed
resources...
|
by: AAguiar |
last post by:
Thanks for your replies. Last week, I continued working with this problem.
Trying to reproduce the error, I developed a short example and found that
the problem is related to strong name dll.
Following is the example to reproduce it.
I have a C++ project (mixed dll, managed and unmanaged), with classes:
EncodeDecode.cpp, EncodeDecode.h, DecoderRing.cpp as follows:
---------------------------
| |
by: AAguiar |
last post by:
Thanks for your replies. Last week, I continued working with this problem.
Trying to reproduce the error, I developed a short example and found that
the problem is related to strong name dll.
Following is the example to reproduce it.
I have a C++ project (mixed dll, managed and unmanaged), with classes:
EncodeDecode.cpp, EncodeDecode.h, DecoderRing.cpp as follows:
---------------------------
|
by: shu |
last post by:
I get a _CrtIsValidHeapPointer assertion when trying to have a
unmanaged static object linked to my managed project.
I have tried to reduce the problem to a very simple case:
One unmanaged .cpp file (compiled with "No Common language Runtime
Support") added to a managed .exe project. This unmanaged .cpp
declares a static object, with
its constructor and destructor.
|
by: bvisscher |
last post by:
I posted this recently in microsoft.public.vc.language and was
redirected
here.
I also searched this ng and found some relavant threads.
The most relavent I found was:
http://groups.google.com/group/microsoft.public.dotnet.languages.vc/browse_frm/thread/dac4c07f8678cc0a/32919fdc1ee07313?q=static+initialization+mixed&rnum=2#32919fdc1ee07313
|
by: Dave |
last post by:
I have a global.asax file with Application_Start defined and create some
static data there and in another module used in the asp.net application and
I realize that static data is shared amongst child apps of an IIS
application and can be used by multiple users during the application life
cycle and for multiple page loads for the same or different page under a
root application.
What I don't understand and need to know is whether that...
|
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 effortlessly switch the default language on Windows 10 without reinstalling. I'll walk you through it.
First, let's disable language synchronization. With a Microsoft account, language settings sync across devices. To prevent any complications,...
|
by: Oralloy |
last post by:
Hello folks,
I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>".
The problem is that using the GNU compilers, it seems that the internal comparison operator "<=>" tries to promote arguments from unsigned to signed.
This is as boiled down as I can make it.
Here is my compilation command:
g++-12 -std=c++20 -Wnarrowing bit_field.cpp
Here is the code in...
| |
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 tapestry of website design and digital marketing. It's not merely about having a website; it's about crafting an immersive digital experience that captivates audiences and drives business growth.
The Art of Business Website Design
Your website is...
|
by: agi2029 |
last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing, and deployment—without human intervention. Imagine an AI that can take a project description, break it down, write the code, debug it, and then launch it, all on its own....
Now, this would greatly impact the work of software developers. The idea...
|
by: conductexam |
last post by:
I have .net C# application in which I am extracting data from word file and save it in database particularly. To store word all data as it is I am converting the whole word file firstly in HTML and then checking html paragraph one by one.
At the time of converting from word file to html my equations which are in the word document file was convert into image.
Globals.ThisAddIn.Application.ActiveDocument.Select();...
|
by: adsilva |
last post by:
A Windows Forms form does not have the event Unload, like VB6. What one acts like?
|
by: 6302768590 |
last post by:
Hai team
i want code for transfer the data from one system to another through IP address by using C# our system has to for every 5mins then we have to update the data what the data is updated we have to send another system
|
by: muto222 |
last post by:
How can i add a mobile payment intergratation into php mysql website.
| |
by: bsmnconsultancy |
last post by:
In today's digital era, a well-designed website is crucial for businesses looking to succeed. Whether you're a small business owner or a large corporation in Toronto, having a strong online presence can significantly impact your brand's success. BSMN Consultancy, a leader in Website Development in Toronto offers valuable insights into creating effective websites that not only look great but also perform exceptionally well. In this comprehensive...
| |