私は ac# アプリケーションを持っています。これは、c++-cli dll を参照します。c++ dll の名前空間では、public 構造体が宣言されています。
namespace Wrapper {
public struct maxs
{
public:
char Name[255];
int num;
};
etc
c++ dll には、ポインタを構造体へのポインタに返す関数があります。
Wrapper::Maxs** Wrapper::Class1::CallMax();
C# アプリケーションは、c++ dll を参照し、構造体 (安全でないコード) のインスタンスを宣言します。
Wrapper.Class1 oMax = new Wrapper.Class1()
Wrapper.Maxs** maxs;
maxs= oMax.CallMax();
int num = oMax.m_num;
次に、次のように maxs のフィールドにアクセスしようとします。
for(int i = 0; i < num; ++i)
{
name = maxs[i]->name;
}
ただし、その「名前」フィールドは c# インテリセンスでは表示されず、コンパイルされません。興味深いことに、C++ メタデータで構造体の定義を見に行ったところ、構造体は空白です。
using System;
using System.Runtime.CompilerServices;
namespaceWrapper
{
[CLSCompliant(false)]
[NativeCppClass]
[UnsafeValueType]
public struct Maxs
{
}
}
それは正常ですか?問題は、なぜ c# は public struct Maxs のフィールドを認識できないのでしょうか? また、メタデータ情報に空白の構造体が表示されるのはなぜですか? ありがとう。