Marshal C ++ Struct как ссылка в C # - PullRequest
       8

Marshal C ++ Struct как ссылка в C #

0 голосов
/ 07 декабря 2011

Я пытаюсь скопировать эту структуру из C ++ в C #:

        typedef struct
        {
            int id;
            char *name;
        } *ListOfObjects;

Я пытался использовать это, но он неправильно импортируется в приложение, которое использует эту DLL и ищет определенную подпись.

  [StructLayout(LayoutKind.Sequential), Serializable]
  public struct ListOfObjects {
       [MarshalAsAttribute(UnmanagedType.ByValArray)]
       public int id;

       [MarshalAsAttribute(UnmanagedType.ByValTStr, SizeConst = 15)]
       public string name;
  }

  [DllExport("ReadListOfObjects", CallingConvention = CallingConvention.Cdecl)]
  static ListOfObjects ReadListOfObjects()
  {
      ListOfObjects lists = new ListOfObjects();
      return lists;
  }

После того, как я скомпилировал DLL и затем попытался запустить программу, которая импортирует эти функции, выдает эту ошибку:

  The prodedure entry point ReadListOfObjects could not be located in the dynamic link library thedll.dll.

Есть идеи?

1 Ответ

2 голосов
/ 07 декабря 2011

Попробуйте это:

[StructLayout(LayoutKind.Sequential), Serializable]
public struct ListOfObjects
{
    public int id;

    [MarshalAs(UnmanagedType.LPStr)]
    public string name;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...