Ich habe eine C++ DLL, die die folgende FunktionRangierung in C# (Passing-Struktur auf einen nicht verwalteten Typen)
long func(struct name * myname)
{
strcpy(myname->firstname,"rakesh");
strcpy(myname->lastname,"agarwal");
return S_OK;
}
struct name
{
char firstname[100];
char lastname[100];
}
Ich möchte rufen Sie diese Funktion aus einer C# Anwendung aussetzt, so dass ich wie folgt vorgehen:
[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);
Die Anwendung wird erfolgreich erstellt. Wenn die C# -Anwendung EXE ausgeführt wird, wird die Funktion func()
erfolgreich aufgerufen und es ist möglich, die Felder erfolgreich in der DLL zu füllen. Wenn die Funktion jedoch zu der C# -Anwendung zurückkehrt, enthält die Variable myname
weiterhin Nullwerte für die Strukturfelder (firstname
und lastname
).
Bitte Änderungen vorschlagen, so dass ich in der Lage bin, um die Felder Werte von myname
bevölkert (so dass nach der Funktion func()
beendet Ausführung, die Variable myname->firstname
„rakesh“ enthält und myname->lastname
enthält „agarwal“
. Hinweis: String kann nicht innerhalb der Struktur verwendet werden