User 13204940 Ответов: 1

Объект не соответствует целевому типу


Привет

У меня есть несколько библиотек DLL, на которые я ссылаюсь в двух тестовых приложениях-UEClientTest и UEServerTest. Ссылки являются UEGameClient.dll и UEGameServer.dll.

В UEClientTest и UEServerTest в классе Main есть следующий метод:

public void logPacket(PacketDirection direction, string name)
{
    if (InvokeRequired)
    {
        Invoke(new logPacketDelegate(logPacket), direction, name);
    }
    else
    {
        listBox1.Items.Add((direction == PacketDirection.SEND ? "To" : "From") + " client: " + name);
    }
}

private delegate void logPacketDelegate(PacketDirection direction, string name);


Этот метод вызывается из UEGameClient.dll и UEGameServer.dll соответственно, из другого потока, отсюда делегат и вызов.

Проблема в том, что когда я пытаюсь использовать этот метод, я получаю ошибку "объект не соответствует целевому типу". Пример использования:
main.GetType().GetMethod("logPacket").Invoke(main, PacketDirection.SEND, packet.GetType().Name);


Здесь "main" - это параметр формы, который передается этому классу при построении.

Что я уже пробовал:

---------------------------------------------------------------------------

________________

Первый глупый вопрос:
Является ли перечисление (?) PacketDirection определенным только один раз? Иногда в больших проектах простые вещи могут дублироваться, и поэтому во время выполнения они не будут однотипными.

1 Ответов

Рейтинг:
6

User 13204940

Решение:

Оказывается, есть странная ошибка с Visual Studio Professional 2017, которая позволила мне построить библиотеки DLL, даже если они имели синтаксические ошибки, что означало, что любой проект, который зависел от них, испытывал эту странную ошибку.

Несколько вкладок из других проектов открылись в окне неправильных проектов, поэтому я закрыл все вкладки в каждом проекте, закрыл все проекты, снова открыл их и увидел, что у меня есть несколько синтаксических ошибок, которые редактор не обнаружил раньше.


CHill60

Пожалуйста, прекратите публиковать вопросы только для того, чтобы вы могли ответить на них сами.
Репутация point farming не одобряется и может привести к приостановке вашей учетной записи. Если это подлинные случаи, когда Вы наконец-то нашли ответ для себя, то я предлагаю вам подождать еще немного, прежде чем публиковать здесь

[no name]

Меня не интересует репутационное сельское хозяйство, и я никогда о нем не слышал. Когда я задаю вопрос, я все равно пытаюсь решить проблему сам. В некоторых случаях мне удалось решить эту проблему, поэтому я публикую решение на случай, если у кого-то еще возникнет такая же проблема. Что касается вашего 1-звездочного голоса, то мне все равно.

CHill60

1. "несколько случаев" ... все, кроме одного из недавних решений, которые я удосужился посмотреть, были вашими собственными вопросами, все принятые, никакие другие решения также не были приняты. Именно это поведение и послужило поводом для моего комментария.
2. в то время как хорошо, что вы нашли решение, другие люди вряд ли будут иметь ту же проблему, поскольку большинство ваших вопросов очень специфичны. Тот факт, что вы отвечаете на такое большое количество собственных вопросов, является подозрительным поведением. Как я уже сказал в своем первоначальном комментарии, такое поведение здесь осуждается независимо от того, как вы его называете.
3) нисходящий Голос здесь это действительно было от меня, хотя ты не можешь этого знать. Однако множество других понижений, которые ваши решения уже получили, были не от меня.
4) Вы заметите, что я предложил предложение о том, как вы могли бы избежать восприятия фермерства с точки зрения репа. Этот совет был предложен добросовестно, но от вас полностью зависит, прислушаетесь вы к нему или нет. Лично мне все равно в любом случае

[no name]

I have nothing to 'fear', if you could call it that, by simply answering some of my own questions. When I ask a question, it's usually because I've tried to solve it by myself for several hours prior. Even though, most of the time these are project-blocking issues, so I ask a question and carry on trying myself to maximise my chances of finding a solution. Some people ask questions without having tried, or give up once they've asked a question and hope for the best. I'm better than that, but apparently it makes you suspicious. I have 340 rep, do you really think boosting it is on my life priorities list? I literally only use this forum when I have no other choice due to how many toxic comments I get and the fact that a bot/basement-dwelling creature is consistently 1-star-voting my questions regardless how much I explain myself and prove my efforts to solve it myself. I know other people are unlikely to have the same problem, but I've always been nagged by higher-ranking members to post the solution and accept it.

[no name]

Что касается "подождите еще немного", то я отправил этот вопрос 12 часов назад. Похоже, вы из тех людей, которые верят в "виновен, пока не доказана невиновность" - есть причина, по которой это не так, как работает большая часть мира.

CHill60

Тем не менее, вы ответили на некоторые из ваших других вопросов менее чем за 5 минут. Мой комментарий был основан не на единичном событии, а на накоплении доказательств.
И (без изменений) фраза должна быть "невиновен если не доказанная виновность" - это допускает возможность невиновности, а не неизбежность вины.

[no name]

Да, естественно, что время, необходимое для решения проблемы, сильно варьируется в зависимости от множества факторов. Возможно, это тот случай, когда, отвлекаясь от проекта, чтобы написать вопрос, я получаю достаточно времени, чтобы очистить свою голову, и поэтому, когда я заканчиваю писать вопрос, мне удается решить его относительно быстро.

[no name]

Поскольку я уже объяснил, что я не занимаюсь сельским хозяйством, и мое решение действительно было точным, не хотите ли удалить 1-звездочное голосование? Это используется, если решение неточно или плохо объяснено.

CHill60

АФАИК, я не могу снять 1-звездочное голосование. Об этом уже говорилось на форуме Bugs &Sugs.
Голосование за 1 звезду-это нет используется, если решение является неточным или плохо объясненным-для этого существует механизм отчетности. Звездная система существует для того, чтобы люди могли высказать свое мнение о решении. Вы утверждаете, что в VS есть странная ошибка, но не подтверждаете это никакими доказательствами (например, ссылкой на веб-сайт, где вы нашли эту информацию), поэтому мое мнение о вашем решении плохое. Кто - то другой может прийти с другим мнением и проголосовать соответственно-так работает система.

[no name]

Я знаю, что это ошибка, потому что я испытал это. Редактор, не обнаруживающий синтаксических ошибок, - это ошибка.

Richard Deeming

Инструменты ⇒ опции ⇒ проекты и решения ⇒ сборка и запуск
Убедиться "При запуске, когда возникают ошибки сборки или развертывания" устанавливается на "Не запускать".

[no name]

Спасибо, я позабочусь о том, чтобы этот набор был установлен на будущее.