Я очень новичок в C++, поэтому у меня могут быть некоторые ошибки на этой стороне. Так что я начал с написанием простой функции C++, которая будет содержать-структуру в качестве типа возвращаемого значения:передайте функцию C++, которая содержит struct to C# и преобразует ее в C# -функцию с Marshal.PtrToStructure
моего C++ структура:
struct a {
int i;
};
моего C++ функция объявление в library.h файл:
extern "C" __declspec(dllexport) struct a retNumber();
моего Описание функции C++ в файле library.cpp:
struct a retNumber()
{
struct a r = a();
r.i = 22;
return r;
}
Я просто хочу, чтобы скомпилировать его, а затем использовать его в C# код, я получаю следующие ошибки компиляции:
error C2371: 'retNumber' : redefinition; different basic types
error C2526: 'retNumber' : C linkage function cannot return C++ class
error C2556: 'a retNumber(void)' : overloaded function differs only by return type from 'void retNumber(void)'
Это первая часть моего вопроса, и если вы, ребята, поможете мне решить, я действительно ценю это после того, как он решил, что я собираюсь объявить же структуру в моих C# код:
struct a1
{
int i;
}
Тогда я буду импортировать мои C++ функции:
[DllImport("library.dll")]
public static extern a1 retNumber();
После того, как это сделано, я создам GCHand ль:
a1 test = retNumber();
GCHandle handle = GCHandle.Alloc(test, GCHandleType.Pinned);
, а затем я буду стараться, чтобы преобразовать мой фактический результат и освободить память:
Object temp = Marshal.PtrToStructure(handle.AddrOfPinnedObject(), typeof(a1));
handle.Free();
Так к этому времени я должен иметь объект, который имеет типа a1 и содержит переменный я со значением 22
Если кто-то может порадовать этот процесс, я буду очень благодарен! Спасибо вам большое заблаговременно !!!
Я действительно предлагаю, чтобы у вас было 2 вопроса, которые вы задаете им обоим по отдельности. –
они надежны друг на друга, а люди C++ смогут увидеть, что я ищу – inside