У меня есть c ++ dll, которая предоставляет следующую функцию
long func(struct name * myname)
{
strcpy(myname->firstname,"rakesh");
strcpy(myname->lastname,"agarwal");
return S_OK;
}
struct name
{
char firstname[100];
char lastname[100];
}
Я хочу вызвать эту функцию из приложения C #, поэтому я делаю следующее:
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
unsafe public struct name
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=100)]
public string firstname;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 100)]
public string lastname;
} ;
[DllImport("C++Dll.dll")]
public unsafe static extern long func(name[] myname);
name[] myname = new name[1];
func(myname);
Приложение успешно собирается. При запуске приложения C # .exe успешно вызывается функция func()
, и она может успешно заполнять поля внутри библиотеки DLL. Но когда функция возвращается в приложение C #, переменная myname
все еще содержит нулевые значения для полей структуры (firstname
и lastname
).
Пожалуйста, предложите изменения, чтобы я мог заполнить значения полей myname
(чтобы после завершения функции func()
переменная myname->firstname
содержала "rakesh", а myname->lastname
содержала "agarwal").
Примечание: StringBuilder нельзя использовать внутри структуры.