J'ai un struct C++Rassemblant une struct contenant c-strings
struct UnmanagedStruct
{
char* s;
};
et un struct C#
struct ManagedStruct {
[MarshalAs(UnmanagedType.LPStr)]
string s;
}
la bibliothèque C++ expose
extern "C" UnmanagedStruct __declspec(dllexport) foo(char* input);
Et il est importé comme
[DllImport("SomeDLL.dll", CharSet = CharSet.Ansi)]
static extern ManagedStruct foo(string input);
Il n'y a rien de mal à rendre les champs public dans les structures qui sont utilisées uniquement à des fins P/Invoke. Tous les accesseurs seraient triviaux de toute façon, et cela ne changera jamais à l'avenir, alors pourquoi écrire plus de code? –
J'ai essayé, mais je continue à me signature de type de méthode n'est pas compatible Pinvoke – DevDevDev
lecture Microsoft aide il dit « chaînes ANSI doivent être marshalés au moyen d'un IntPtr et transmis comme un tableau d'octets. » – DevDevDev