Мой вопрос связан с попыткой вызвать функцию, написанную на C из C #. Я заглянул в файл заголовка, поставляемый с библиотекой C, чтобы понять, какие функции существуют в Cll. Вот что я вижу:
код C (для функции с именем "LocGetLocations"):
typedef enum {
eLocNoError,
eLocInvalidCriteria,
eLocNoMatch,
eLocNoMoreLocations,
eLocConnectionError,
eLocContextError,
eLocMemoryError
} tLocGetStatus;
typedef void *tLocFindCtx;
typedef void *tLocation;
PREFIX unsigned int POSTFIX LocGetLocations
(
tLocFindCtx pCtx,
tLocation *pLoc,
unsigned int pNumLocations,
tLocGetStatus *pStatus
);
В C # у меня есть это:
[DllImport(@"VertexNative\Location.dll")]
public static extern uint LocGetLocations(IntPtr findContext, out byte[] locations, uint numberLocations, out int status);
Проблема в том, что я не совсем знаю, как обрабатывать параметр pLoc в C #. Я представляю его как массив байтов, хотя я не уверен, что это правильно. Документация библиотеки C говорит, что этот параметр является указателем на массив дескрипторов.
Как вернуть массив на стороне C # и получить доступ к его данным?
Пример, который я привел в C, выглядит так:
tLocation lLocation[20];
// other stuff
LocGetLocations(lCtx, lLocation, 20, &lStatus)
Любая помощь будет высоко ценится!