Burada ilk sorum var :)C++ ile C# arasındaki nesnelerin listesi nasıl iletilir?
C++ ile yazılmış ön uç kullanıcı arabirimine sahip C++ (oyun için bir harita düzenleyicisi) ile yazılmış bir uygulamada çalışıyorum. C# 'den yeni olduğum için C++ tarafında olabildiğince fazla yapmaya çalışıyorum.
C# ile basit değişken türleri (int ve dize) içeren yapıların bir listesini döndürecek bir C++ işlevini çağırmak istiyorum; Mümkün mü? C# dll içe aktarma işlevini nasıl yazmalıyım?
Yanıt için burayı aramayı denedim, ancak yalnızca C# 'dan C++' a kadar listelerin nasıl iletileceğine dair yazı buldum.
C++ kod:
struct PropData
{
PropData(const std::string aName, const int aId)
{
myName = aName;
myID = aId;
}
std::string myName;
int myID;
};
extern "C" _declspec(dllexport) std::vector<PropData> _stdcall GetPropData()
{
std::vector<PropData> myProps;
myProps.push_back(PropData("Bush", 0));
myProps.push_back(PropData("Tree", 1));
myProps.push_back(PropData("Rock", 2));
myProps.push_back(PropData("Shroom", 3));
return myProps;
}
C# aktarım fonksiyonu:
[DllImport("MapEditor.dll")]
static extern ??? GetPropData();
DÜZENLEME: yapı PropData C++ kodu değiştirildi Ed S'den yazı sonra
{ PropData (const std :: dize aName, const int, bir) { myName = aName; myID = aId; }
std::string myName;
int myID;
};
extern "C" _declspec(dllexport) PropData* _stdcall GetPropData()
{
std::vector<PropData> myProps;
myProps.push_back(PropData("Bush", 0));
myProps.push_back(PropData("Tree", 1));
myProps.push_back(PropData("Rock", 2));
myProps.push_back(PropData("Shroom", 3));
return &myProps[0];
}
ve C# [Dllımport ("MapEditor.dll")] statik Harici PropData GetPropData();
struct PropData
{
string myName;
int myID;
}
private void GetPropDataFromEditor()
{
List<PropData> myProps = GetPropData();
}
Ancak, GetPropData() bir listeye dönüşen herhangi bir şey döndürmediği için bu işlem derlenmez.
Bana bu kadar uzaklaştığınız için çok teşekkürler Ed S.
Ayrıca bir yapı kullanamadı mı? Elbette her şeyi tek bir dilde yapmak daha kolay olur. Ön uç C# ile yazılırsa, C# 'da her şeyi yapmak mümkün olmalıdır. –
Hızlı yanıt için teşekkürler, ancak C# sözdizimi ile ilgili daha fazla yardıma ihtiyacım var, dil için yeni olduğumu söylediğim gibi (bugün başladım), işaretçilerle başa çıkabileceğini bile bilmiyordum. – Cousken
@Ramhound: Tam olarak bir std :: vektörünü taklit eden bir C# yapısını nasıl oluşturabileceğinizi göremiyorum. Bu sadece POD tipleri için çalışır. –