什麼是最好的(簡單無需增加大量的開銷),每股非託管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