|
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")
|
|
|
|
|
Hey, I'm glad you were able to find the post, then! It always drives me crazy when googling around for answers leads me to a thread that ends in "Oh, I fixed it, never mind" with no solution.
|
|
|
|
|
Hi I was wondering to read a file in and display this file in a listbox.
I know how to do this in the console programming but not sure how to do this in windows forms.
This how I do it in console programming. Just not sure how to do this in windows forms.
<br />
int openFile()<br />
{<br />
ifstream filex;<br />
filex.open ("test.txt", ios::in );<br />
<br />
if (filex.is_open())<br />
{<br />
<br />
filex.seekg (0, ios::end);<br />
size = filex.tellg();<br />
<br />
filemem = new char [size]; <br />
<br />
filex.seekg (0, ios::beg);<br />
filex.read (filemem, size); <br />
<br />
ifstream fin("test.txt",ios ::in);<br />
<br />
cout << cin.rdbuf();<br />
<br />
<br />
filex.close();<br />
}<br />
else <br />
{<br />
cout << "Unable to open file";<br />
}<br />
return 0;<br />
}
Thanks
The New kid
|
|
|
|
|
|
Hello!
I am about 2 hours into looking at Managed Code, so I'm completely new to this. The problem I'm running into is casting a managed type to an unmanaged type.
I need to cast a cli array of unsigned char into unsigned char *.
Is there a Marshal:: function that can do this for me?
Here's what's going on...
MyFunction accepts (unsigned char *)
MyFunction((unsigned char*)&pStructure->pCliArrayOfUChar)
This obviously doesn't work because you can't cast from managed to unmanaged. (I just learned this!)
Thanks for your help!!
|
|
|
|
|
ChemmieBro wrote: I am about 2 hours into looking at Managed Code
ChemmieBro wrote: I need to cast a cli array
Not sure I understand. If you are only two hours into learning managed C++ then how can you "need" to do something specific?
|
|
|
|
|
|
Dear Sir, This below what I do that is not working I do know why ?
I need to verify if what I capture in the field j01 of my form is inside "APC" string.
This is not working. I don't understand.
Help me
private: System::Void j01_Leave(System::Object^ sender, System::EventArgs^ e) {
String^ pta = "APC";
if(this->j01->Text->Trim()->Contains(pta)== false)
{
::MessageBox::Show("Code Pointage inexistant");
this>j01>Text = "";
this>j01>Focus();
}
}
|
|
|
|
|
Did you get a beginners book yet? Did you sign up for a University Course? What are you doing to learn basic fundamental programming topics?
|
|
|
|
|
What are loss if you help me ? The forum is there for that, I don't understand now what this forum want to ask.
|
|
|
|
|
If there is a forum for the beginer in Visual c+ NET, show me it
|
|
|
|