2
我有一個C#應用程序。它引用了一個C++ - cli dll。在C的命名空間++ DLL中的公共結構聲明:公共結構在託管c + + dll無法看到從c#
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#intellisense中不可見,並且不能編譯。 有趣的是我去看看在C++中的元數據結構的定義和結構是空白..
using System;
using System.Runtime.CompilerServices;
namespaceWrapper
{
[CLSCompliant(false)]
[NativeCppClass]
[UnsafeValueType]
public struct Maxs
{
}
}
是正常嗎? 所以問題是:爲什麼C#不能看到公共結構最大值的字段?爲什麼元數據信息顯示空白結構? 謝謝。
因爲它不是託管結構。您需要將其聲明爲「公共價值結構」。 – 2013-03-24 02:33:32
謝謝漢斯!完成了這項工作,我學到了新的東西。 – user2192008 2013-03-24 04:36:37
@HansPassant:你介意給出一個答案,所以作者可以接受它..?我知道這很不重要,但是這個線程將會以其他方式掛起。這是不合資格被關閉.. – quetzalcoatl 2013-03-28 00:16:42