|
Right -- so is there any way I can get an interior pointer to the memory that implements the array?
READIN writin rhythmetic
|
|
|
|
|
Yes!! I have found the solution at MSDN -- I pin the pointer to the first element of the array.
READIN writin rhythmetic
|
|
|
|
|
|
> __int32 __pin * ptr = (int*)&array[0];
Why do you put that (int *) cast in? The line compiles without the cast -- I would think the cast would generate a compiler error -- can't convert a __gc pointer to an unmanaged pointer. No?
READIN writin rhythmetic
|
|
|
|
|
Jeremy Osner wrote:
Why do you put that (int *) cast in? The line compiles without the cast --
&array[0] is of type (void*) . I just assumed C++ would complain Normally I would just do a void __pin * ptr, and cast at function invocation.
leppie::AllocCPArticle(Generic DFA State Machine for .NET);
|
|
|
|
|
If array is declared as Int32 array[], then the type of &array[0] is either Int32 __value * or Int32 __gc *, I think the first. You are taking the address of an element of the array, which will have whatever type you used in the array declaration.
READIN writin rhythmetic
|
|
|
|
|
Jeremy Osner wrote:
If array is declared as Int32 array[], then the type of &array[0] is either Int32 __value * or Int32 __gc *, I think the first. You are taking the address of an element of the array, which will have whatever type you used in the array declaration.
But alas, C does not care, all it wants is a pointer to expected data.
leppie::AllocCPArticle(Generic DFA State Machine for .NET);
|
|
|
|
|
Does anyone know how to get rid of this warning? I see it any time i compile a new Class Library.
rechi
|
|
|
|
|
I just ignore it since there are always bigger fish to fry.
Search yeilds the following:
'The linker was unable to find your .pdb file. Copy it into the directory that contains object/library.
To tell is your .lib and .pdb are properly matched:
Extract an object file from the library with lib /extract:objectname.obj xyz.lib.
Check the path to the .pdb file with dumpbin /headers objectname.obj'
I read that and decided if it ain't broke don't fix it.
pod
|
|
|
|
|
chassisman wrote:
I just ignore it since there are always bigger fish to fry.
This is so... true
Thanx for the info.
rechi
|
|
|
|
|
Hi all
i am writing a custom control derived from UserControl in ManagedC++.This class is using third party unmanaged C++ classes(from VTK library) internally.
When i tried to build the control i got the following following error.
D:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\ObjIdl.h(7408): error C2872: 'IDataObject' : ambiguous symbol
Please somebody help me how to get rid of this error.
Thanks in advance
Regards
Kriohna
|
|
|
|
|
Usually this error happens when the compiler is not able to determine which symbol you are refering to. A typical example is when you have two methods with the same name but defined in diferent namespaces used in the project. If this is the case try to use full namespaces when refering to them.
|
|
|
|
|
I want to deliver my DLL which was written in VC++.net. I use CStringT extensively. When I try to run my DLL in a C# application in another machine which did not install Visual Studio.NET . It give exception problem.
How do I pack the ATLMFC in VC7.0?
I do not want it to be statically link because I had tested before and it give me problem saving some GDI32 functions is already in some of my other lib. Also I do not want my app to be bulky.
So, I would prefer dynamic bind. Where and how to get MFC7.0 redistributable?
Thank you
|
|
|
|
|
My answer to my own question (in case someone interested)
You will need this DLL
- msvcr70d.DLL
and other .NET redistributables
Sonork 100.41263:Anthony_Yio
|
|
|
|
|
Hi All
i am wrapping up a MFC custom control in Managed C++ by subclassing it.
I am having enum type in MFC which i want to expose to outside via Wrapper class.So i defined equivalent enum type in managed C++.How can i type cast from ManagedC++ to unmanaged type?Is there any otherway to avoid this redefinition?
Thanks in advance
Krishna
|
|
|
|
|
How about this:
namespace oldCpp
{
enum { myfirst = 0, mysecond };
}
public __value enum newMCpp { myfirst = oldCpp::myfirst, mysecond = oldCpp::mysecond };
Then you could do something like:
int oc = (int)newMCpp::myfirst;
Untested, but should hopefully get you started.
[edit] wrapped first enum in namespace. Learned this in another post in the VC forum. [/edit]
Hope this helps,
Nathan
---------------------------
Hmmm... what's a signature?
|
|
|
|
|
I noticed my program was leaking memory at a huge rate -- went in and did some debugging and it seemed pretty clear that managed memory was never being deallocated. After fretting for a while over why this should be so, I added a call System::GC::Collect() under certain circumstances. With this call in, there is no leak. Why shouldn't the gc have been collecting on its own -- isn't this the whole point of garbage collection?
READIN writin rhythmetic
|
|
|
|
|
The garbage collector in .NET is a lazy collector. What this means is that it will not collect until it needs to. Only when memory is getting low, will it collect.
Check the MSDN for more info.
-Nathan
---------------------------
Hmmm... what's a signature?
|
|
|
|
|
Thanks, I guess I just wanted it do happen a bit before it would by default -- are there any caveats I should be aware of afa using GC::Collect()?
READIN writin rhythmetic
|
|
|
|
|
Only a possible performance hit. How often are you calling a collect? A collection is very intensive operation since it has to go through all the objects in your process and see if they are to be collected.
-Nathan
---------------------------
Hmmm... what's a signature?
|
|
|
|
|
Yeah, I figured it was an expensive call -- I am doing it quite infrequently, immediately after a call which I know results in a whole lot of objects being eligible for reclamation -- is that the correct terminology? I want to just say "I deleted a lot of stuff" but obviously I did not delete it, I just removed references.
READIN writin rhythmetic
|
|
|
|
|
Jeremy Osner wrote:
eligible for reclamation
I think the phrase would be "eligible for collection", because "reclamation" to me sounds like you are recycling the objects themselves instead of just the memory. But I am sure that anyone you typed with or spoke to would readily understand .
-Nathan
---------------------------
Hmmm... what's a signature?
|
|
|
|
|
Thanks for the help, Nathan!
READIN writin rhythmetic
|
|
|
|
|
Hey,
First of all, I would like to say with only being a member of this site for a little while, I have found it very useful. I am pretty much a newbie in programming and don't know much about compiler and linker errors. I get this error when trying to compile.
playSound.obj : error LNK2022: metadata operation failed (8013118D) : Inconsistent layout information in duplicated types (playSound): (0x02000005).
LINK : fatal error LNK1255: link failed because of metadata errors
Anybody know what this is? If you need source code I can give it. I am sure I included all the includes and libraries. Thanks.
Also does anybody know how to convert a String to a LPCWSTR? I hadn't heard of LPCWSTR before but appears to be some other kind of string.
example:
String * str = S"Hello";<br />
<br />
somefunction(MyConvertedString)
Double thanks.
|
|
|
|
|
I can't answer your linker question but an LPCWSTR is a char pointer -- see the thread lower on this page regarding PtrToStringChars().
READIN writin rhythmetic
|
|
|
|