什么是最好的(简单无需增加大量的开销),每股非托管scructures托管库之间?什么是分享裁判班这回非托管结构的正确方法?
可以说我有一个托管类库如下:
// MyClassLib.h
#pragma once
#include "MyLegacyStruct.h"
using namespace System;
namespace MyClassLib {
public ref class Class1
{
protected:
MyLegacyStruct* m_internalBuffer;
public:
Class1() { }
~Class1() { }
MyLegacyStruct* GetBuffer()
{
return m_internalBuffer;
}
};
}
...结构定义(库):
// MyLegacyStruct.h
#pragma once
namespace MyClassLib {
typedef struct MyLegacyStruct
{
unsigned int m_someVar;
} MyLegacyStruct;
}
...和一个简单的控制台应用程序,它要使用该库:
// ConsoleApp.cpp : main project file.
#include "stdafx.h"
#include "MyLegacyStruct.h"
using namespace System;
using namespace MyClassLib;
int main(array<System::String ^> ^args)
{
Console::WriteLine(L"Hello World");
Class1^ c1 = gcnew Class1();
MyLegacyStruct* s1 = c1->GetBuffer(); // <-- This is a problem
return 0;
}
...这使得编译器抱怨:
2>.\ConsoleApp.cpp(14) : error C3767: 'MyClassLib::Class1::GetBuffer': candidate function(s) not accessible
内部缓冲器在一些相当重负荷处理算法然后将其与.NET代码胶合一起使用,以使这一切好和模块化,挂钩到一个C#GUI以及一些命令行再加工工具。
什么是正确的方法来做到这一点?退货void *
?制作一个.net ref结构体,使用它复制模块之间的所有数据然后再转换回来?
排序 - 好一个! –
你必须给适当的归属,当你复制一个这样的答案。除了答案的链接之外,你还必须发布一个链接,指向给出答案的人的个人资料。 –
嗨汉斯,我已经添加了一个链接到家伙个人资料,并添加了引用msdn的报价......这是否看起来正确? – Alex