2012-01-18 4 views
2

Мне нужно взаимодействовать с функцией C от C# Функция отправляет сообщение по сети.Передача указателя на общую структуру

Вот мое рабочее определение в C#:

delegate void SendNetMessageDelegate(uint messageCode, ref MessageData messageData, uint messageSize); 

и MessageData определяется так:

[StructLayout(LayoutKind.Sequential)] 
internal struct MessageData { ... } 

эти определения хорошо работают до сих пор.

Проблема в том, что иногда мне нужно вызвать ту же функцию с другой полезной нагрузкой. Это означает, что мне пришлось бы сделать еще один делегат, который принимает структуру «OtherMessageData» вместо «MessageData»

Так что мне пришлось бы добавить еще один SendNetMessageDelegate, который берет другую структуру в качестве ссылки.

Есть ли более простой способ? Так что я могу назвать SendNetMessage (messageCode, реф AnyStructHere MessageData, MESSAGESIZE)

Я попытался изменить тип параметра на «объект», а затем бросая свои структур на объект, но это не работает ...

ответ

0

Как насчет дженериков

delegate void SendNetMessageDelegate<TPayload>(uint messageCode, ref TPayload payload, uint messageSize); 
+0

Затем я хотел бы использовать делегат, как это: SendNetMessageDelegate SendNetMessageThatTakesOtherMessageData = ...; Но так я все равно должен был бы сделать несколько определений. Я хотел бы иметь одно определение функции, которое берет все структуры. Это возможно? – riki

Смежные вопросы