«небезопасные» функции в оболочке C ++ / CLI? - PullRequest
0 голосов
/ 06 марта 2012

Во-первых, позвольте мне поблагодарить всех, кто помог мне в течение последних нескольких дней, у меня наконец есть обертка C ++ / CLI для моего класса C ++, которую я могу создавать в C #, спасибо StackOverflow!

Некоторыеиз этих функций в качестве параметров используются указатели, однако при использовании PInvoke вы можете просто объявить функцию небезопасной, а затем вызвать ее с ключевым словом ref, например,

[DllImport("DLLName.dll")]
public static unsafe extern someFunc(ref int);

// then in main... 
int a;
someFunc(ref a);

, но как мне обернуть функции C ++, которые принимаютпараметры указателя в C ++ / CLI, так что я могу вызывать их из C #?

Спасибо.

EDIT - мои функции подписи

UINT Init(char* info[], int amount, int ID1, int ID2)       
UINT GetJPValues(SJPInfo* jpi, int iTimeoutMS)
UINT GetNums(int amount, int* out, int iTimeoutMS)
UINT GetJPWValues(SJP* jp, int ID, UINT stake, int iTimeoutMS)
UINT Confirm(bool *bConfirmed, int ID, int iTimeoutMS)

JPInfo и SJP являются структурами C ++которые содержат только данные, я создал версии C #, которые упакованы так же, как и их аналоги из C ++, но я также не уверен, как я могу использовать структуры C # в качестве параметра для функций C ++ / CLI, которые затем вызывают функции C ++.

РЕДАКТИРОВАТЬ 2 - Забыл упомянуть, что структуры просто заполнены данными из winsock recv в коде C ++, поэтому они могут бытьпередается как char *?

1 Ответ

1 голос
/ 06 марта 2012

Из опыта я всегда держу интерфейс для простых типов, таких как int, double и т. Д. (Я также использовал String ^ в интерфейсе и просто конвертировал в std :: string, используя код, который легко найти в Интернете).

Это, как правило, означает, что открытые функции в классе-оболочке принимают больше параметров, но это легко понять и, самое главное, работает!

...