|
Mark Salsbery wrote: The GC is unable to manage any managed objects outside of managed code.
So how does one manage to enable the GC to manage managed objects outside of managed code? Also how does one manage to read this stuff without getting dizzy and falling over onto ones managed code?
led mike
|
|
|
|
|
She shells she shells by the she shore ...
How much wood could a woodchuck chuck if a woodchuck could chuck wood...
That's what I was thinking when I typed that
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Well it was a good effort but good luck explaining GC to someone that doesn't understand the foundations of it. You'll end up all the way back on the motherboard.
I'm just waiting to hear that zzzzzzzz sound when he starts reeling you in.
led mike
|
|
|
|
|
led mike wrote: Well it was a good effort but good luck explaining GC to someone that doesn't understand the foundations of it. You'll end up all the way back on the motherboard.
I'm just waiting to hear that zzzzzzzz sound when he starts reeling you in.
Mike, I think rather than commenting on people's understandings, you should rather try and explain the answers as simply as you can..
That would be of better help to newbies like me..
We all are newbies at some point of time and by learning small small things we gain knowledge..
Som
|
|
|
|
|
Som.Paul wrote: We all are newbies at some point of time
So true, and what I did to move beyond knowing nothing was to read Read READ. Asking questions of this nature on a forum only suggests that you don't read. Since I understand the importance of reading I tend to have no patience for so called developers that don't think they have to read to learn the things they need to learn to be a developer.
led mike
|
|
|
|
|
led mike wrote: Asking questions of this nature on a forum only suggests that you don't read.
Very true..
I appreciate answers like this..
I am into reading..
Just got a month into C++/CLI..
Will take your advice seriously..
|
|
|
|
|
som.nitk wrote: I am into reading..
Then you will do well. Wikipedia is a great starting point for most subjects. Those pages will often reference others if you want to go deeper. Here are a couple more important sources of information:
http://martinfowler.com/[^]
http://c2.com/[^]
Joel Spolsky[^]
led mike
|
|
|
|
|
led mike wrote: Wikipedia is a great starting point for most subjects.
C++/CLI wasn't one of them. I'm sure you'll agree.
So the creationist says: Everything must have a designer. God designed everything.
I say: Why is God the only exception? Why not make the "designs" (like man) exceptions and make God a creation of man?
|
|
|
|
|
|
Oh, I wasn't saying I didn't know anything about it, just that the Wikipedia article needs some additions to it. I could contribute, but I'm not very familiar with the Wikipedia "writing style," (nor do I have the time to learn it).
So the creationist says: Everything must have a designer. God designed everything.
I say: Why is God the only exception? Why not make the "designs" (like man) exceptions and make God a creation of man?
|
|
|
|
|
Mark Salsbery wrote: The GC is unable to manage any managed objects outside of managed code.
Thank you Mark, you been great help..
Som
|
|
|
|
|
How to convert a TCHAR[100][100] array to a string array??
Som
|
|
|
|
|
array<String^> ^ StringArray = gcnew array<String^>(100);
for (int i = 0; i < 100; i++)
{
StringArray[i] = gcnew String(...use appropriate parameter(s)...);
}
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
I am getting an error in visual basic.net code when calling a function that returns an array of classes from the dll compiled in managed C++
Error:
"An unhandled exception of type 'System.Runtime.InteropServices.MarshalDirectiveException' occurred in toolbartest.exe
Additional information: Can not marshal return value."
**********
C Code:
**********
#using <mscorlib.dll>
public __gc class gwindow {
public:
System::Int64 hwnd;
System::Int64 ipid;
System::String *szWindowText;
System::String *szClassText;
System::String *szExecFile;
};
gwindow *__declspec(dllexport) foo() __gc [];
gwindow * wn = new gwindow();
wn->hwnd = (System::Int64)(tempWind->hwnd);
wn->ipid = (System::Int64)(tempWind->pid);
arr->Add(wn);
gwindow *gwindows __gc [];
gwindows =
static_cast<__gc class gwindow * []>(arr->ToArray(__typeof( __gc class gwindow)));
return (gwindows);
*************
VB Code:
*************
Public Class gwindow
Dim hwnd As Int64
Dim ipid As Int64
Dim szWindowText As String
Dim szClassText As String
Dim szExecFile As String
End Class
<dllimport("library.dll")> _
Friend Shared Function foo() As gwindow()
End Function
|
|
|
|
|
Wow....I forgot how fugly the old managed extensions syntax is (thankfully)
You do know that's deprecated, right?
Anyway, I don't know VB.NET, so I don't understand why VB doesn't know the class
by using the managed C++ assembly. Why do you have to (re)define the class in VB
when the class info is present in the metadata of the dll assembly?
Also __declspec(dllexport) doesn't make sense either, for the same reasons as above.
That wouldn't even compile in C++/CLI.
This looks like the old "extern "C"" linkage methodology, not a .NET assembly using the metadata from another .NET assembly.
*edit* this is VB.NET, right? There shouldn't even be any marshalling going on unless your C++ DLL is being called
by unmanaged code.
Mark
Last modified: 17mins after originally posted --
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Hello,
I have an unmanaged console application (.exe) that I would like to convert to DLL so I can link it with my managed windows app using Visual Studio 2005 C++ Express. I worked with Visual C++ and MFC before but this is my first time to use .NET and Windows form in C++. I created a multi-project solution with my Windows GUI projet and console application project. Here's what I did:
1. I changed the console application Configuration Type property from "Application (.exe)" to "Dynamic DLL (.dll)".
2. I added the following code in my managed Windows GUI:
[DllImportAttribute("ConsoleApp.dll", CharSet=CharSet::Auto)]
int MyStrCmp( char *strA, char *strB );
3. Then I call the MyStrCmp() function from my Windows GUI.
4. I add reference to the ConsoleApp.dll.
5. It compiled and linked. But when I ran it, I got the error message " Unable to find an entry point named 'MyStrCmp' in DLL 'ConsoleApp.dll'.
There must be more changes needed to the console application than just changing the property from EXE to DLL and adding as reference. Please help.
Thanks,
Manny
|
|
|
|
|
Just curious. This is one continuous question.
Why not Start a new managed mixed mode assembly project?
Put in some test code to exercise a few things first and make sure it compiles. Create a C# application that references the assembly and uses it to make sure it executes without crashing.
Then add your native C++ files from the Console application to the new project and start developing the managed wrapper.
led mike
|
|
|
|
|
I am trying to catch an exception..
<br />
<br />
try{<br />
<br />
ListViewItem^ lvi = gcnew ListViewItem(listViewDisplayArray);<br />
<br />
ListViewItem^ lviCheck = gcnew ListViewItem(listViewDisplayArray);;<br />
<br />
<br />
lviCheck = objListView->FindItemWithText(listViewDisplayArray[1]->ToString()); <br />
<br />
<br />
if(lviCheck)<br />
<br />
{ <br />
<br />
<br />
<br />
;<br />
<br />
}<br />
<br />
else<br />
<br />
{<br />
<br />
objListView->Items->Add(lvi);<br />
<br />
objListView->Update();<br />
<br />
}<br />
<br />
<br />
System::Threading::Monitor::Exit(this); <br />
<br />
}<br />
<br />
catch(NullReferenceException e)<br />
<br />
{<br />
<br />
;<br />
<br />
}<br />
<br />
and I am getting these two errors:
Error 1 error C2725: 'System::NullReferenceException' : unable to throw or catch a managed object by value or reference c:\faltu test\tabsearchpatch\tabsearchpatch\SearchFiles.h 282 tabSearchPatch<br />
Error 2 error C2316: 'System::NullReferenceException' : cannot be caught as the destructor and/or copy constructor are inaccessible c:\faltu test\tabsearchpatch\tabsearchpatch\SearchFiles.h 282 tabSearchPatch <br />
Why is that?
How to solve this?
Som
|
|
|
|
|
Som.Paul wrote: catch(NullReferenceException e)
What about
catch(NullReferenceException ^e)
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Hello, everyone. I am absolutely at my wit's end with this issue, and I really hope that one of you can give me a nudge in the right direction.
I am working on a custom UserControl that I will use in several other projects. Everything is going great, except for the fact that I cannot figure out how to embed images in the compiled DLL so that they can be accessed programmatically. To simplify my question, let's say that I want to load one image from a selection of several within the executable and display it in a PictureBox, since being able to do that will enable me to do what I'm actually working on.
I don't want to preload an ImageList, since my images are larger than it can handle. I've found a ton of documentation on using resource files in Visual Studio, but it all seems very geared towards localization, which makes them way more complicated than what I am trying to accomplish. I've tried adding a .resx file containing the images to my project and accessing them with a ResourceManager, but I get runtime errors to the effect that my resource file was not properly linked it, leading me to believe I'm going about the whole thing wrong.
This just can't be this complicated. Can someone please give me a quick primer on how to create/interact with embedded images in C++/CLI without messing with all of that localization madness?
Thank you all so very much.
|
|
|
|
|
Assembly.GetManifestResourceStream
led mike
|
|
|
|
|
Hey, thanks for the reply. I finally managed to figure out my issue, but I sure do appreciate the help. For my own learning, though, MSDN says that Assembly.GetManifestResourceStream should not be called from managed code. Why did you direct me towards that method?
In case anyone as confused as I was finds this with Google or something, my problem was that I wasn't supplying the ResourceManager constructor with the proper arguments. If your project namespace is "Project," and your included .resx file is named "Stuff.resx," then you need to create the ResourceManager like this:
ResourceManager^ resources = gcnew ResourceManager("Project.Stuff", Reflection::Assembly::GetExecutingAssembly());
It was the "Project.Stuff" bit that got me. I wasn't getting the point from the exception thrown when I tried to use "Stuff"
Thanks again.
|
|
|
|
|
Oddball wrote: MSDN says that Assembly.GetManifestResourceStream should not be called from managed code
Interesting, since it returns a managed object. Where did you see that??
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Mark,
My mistake! I gave MSDN only a cursory glance, and ended up looking at _Assembly::GetManifestResourceStream residing in System.Runtime.InteropServices without realizing it. That page contains the line "This method is for access to managed classes from unmanaged code, and should not be called from managed code" immediately before a link to where I should have been looking.
Thanks again!
|
|
|
|
|
Oddball wrote: In case anyone as confused as I was finds this with Google or something
Got it in one! After a whole day of googling I finally entered the correct set of keywords that led me here.
Your reply was absolutely perfect for what I needed. I have been going insane all day
Thank you so much.
Cheers
[d3m0n]
Email (replace "***" with "key")
|
|
|
|