管理されたライブラリ間で管理されていない構造を共有するのに最適な (多くのオーバーヘッドを追加することなく単純な) ものは何ですか?
次のようなマネージド クラス ライブラリがあるとします。
// 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 構造体を作成し、それを使用してモジュール間ですべてのデータをコピーしてから元に戻しますか?