Ключевое слово "Alias" в VB6: , вероятно, делает то, что, как вы думаете, делает, однако это имя функции в кавычках после ключевое слово "псевдоним", которое является реальной функцией имя в DLL (т. е. TmSendByLength). Имя функции после части «Объявление функции» (т. Е. TmSendByLen) фактически является псевдонимом, который будет использовать код VB6.
Как вы правильно заметили, VB6 не будет разрешать тип параметра «Как любой», поэтому из исходного кода VB6, который вы разместили, разработчик объявил функцию VB6, которая случайно имеет то же имя, что и «настоящая» функция в DLL, и изменил параметры этой функции, чтобы принимать только строковый тип для параметра "msg".
Код VB6 "как есть" на самом деле не перегрузка какой-либо функции, а скорее обтекание функции DLL специфичной для VB6, которая ограничивает тип параметра "msg".
В VB.NET, поскольку вы не можете указать «как любой», я полагаю, что вы можете заменить это на «как объект», хотя это может быть не очень полезно, поскольку другой вызывающий код VB.NET может передавать практически все, что угодно этот параметр. Скорее всего, вам захочется создать перегруженные функции real в VB.NET, где параметр "msg" отличается типом, который вы хотите принять. Таким образом, вы можете разрешить несколько разных типов, но при этом сохранить некоторые ограничения на то, какие типы могут быть переданы в функцию.
Вот пара ссылок, которые вполне могут помочь:
VB6 "Как любой" в VB.Net
PInvoke