一个静态库,内有函数
struct PCDATA
{
DWORD ID;
char name[20];
char data[250];
}
struct PCDATA * getmem(DWORD id)
{
struct PCDATA * p;
p=(struct PCDATA *)malloc(sizeof(struct PCDATA));
p->ID=id;
return p;
}
ref class A
{
private:
struct PCDATA * d; //标记 这样使用是否正确,是否会出现
public:
A(DWORD Value)
{
d=getmem(Value);
};
}
在主函数中
array<A^>^ arrayA=gcnew array<A^>(999999);
for(int i=0;i<999999;i++)
{
arrayA[i]=(A^)gcnew A(i);
}
问题:
1,这样一运行就出现内存溢出错误,为什么呢
2,当垃圾回收机制运行后,在标记处是指向地址是否会改变,地址内容会被更改么
谢谢,各位高手,请指教一下
------解决方案--------------------
溢出,应该是堆内存小了
至于,非托管对象包含在托管类型中 msdn有代码演示
Visual C++
如何:包装本机类以供 C# 使用
请参见 示例
语言筛选器: 全部 语言筛选器: 多个 语言筛选器: Visual Basic 语言筛选器: C# 语言筛选器: C++ 语言筛选器: J# 语言筛选器: JScript
Visual Basic(声明)
Visual Basic(用法)
C#
C++
J#
JScript
本示例说明如何包装本机 C++ 类以便用 C# 或其他 .NET 语言编写的代码可以使用它。
示例
复制代码
// wrap_native_class_for_mgd_consumption.cpp
// compile with: /clr /LD
#include <windows.h>
#include <vcclr.h>
#using <System.dll>
using namespace System;
class UnmanagedClass {
public:
LPCWSTR GetPropertyA() { return 0; }
void MethodB( LPCWSTR ) {}
};
public ref class ManagedClass {
public:
// Allocate the native object on the C++ Heap via a constructor
ManagedClass() : m_Impl( new UnmanagedClass ) {}
// Deallocate the native object on a destructor
~ManagedClass() {
delete m_Impl;
}
protected:
// Deallocate the native object on the finalizer just in case no destructor is called
!ManagedClass() {
delete m_Impl;
}
public:
property String ^ get_PropertyA {
String ^ get() {
return gcnew String( m_Impl->GetPropertyA());
}
}
void MethodB( String ^ theString ) {
pin_ptr<const WCHAR> str = PtrToStringChars(theString);
m_Impl->MethodB(str);
}