Использование импорта / объявления DLL в VB.NET с типами параметров, не используемыми в .NET - PullRequest
1 голос
/ 25 июня 2010

Я работаю над проектом, в котором мне нужно импортировать файл DLL в проект VB, созданный несколько лет назад. DLL была создана в C ++ и выглядит так:

void CoordinateConversionService::convert( SourceOrTarget::Enum sourceDirection, SourceOrTarget::Enum targetDirection, CoordinateTuple* sourceCoordinates, Accuracy* sourceAccuracy, CoordinateTuple& targetCoordinates, Accuracy& targetAccuracy )

Я стажер на своей работе, и мне еще не приходилось этим пользоваться, поэтому мое понимание крайне ограничено, наряду с использованием VB (я парень на C ++ / C #). Вот несколько вопросов:

1) Глядя на Dllimport, кажется, что последняя часть вне параметров является типом возврата. Пример кода с другого сайта:

<DllImport("advapi32.dll")> _
  Public Function GetUserName( _
     ByVal lpBuffer As StringBuilder, _
     ByRef nSize As Integer) As Boolean

Является ли "As Boolean" типом возвращаемого значения? Если это так, я попытался использовать «Sub», и он говорит: «Ключевое слово не называет тип». Поэтому я решил объявить, потому что мне кажется, что я могу вернуть void / sub в качестве возвращаемого типа.

2) Попытки использовать типы "CoordinateTuple" и "Точность" вызывают у меня проблемы, говоря, что они не определены. Как мне обойти это, так как я не думаю, что могу действительно определить их, и как насчет того, что они указатели? Кроме того, я никак не могу изменить код C ++, поэтому у меня есть то, что у меня есть.

Ответы [ 2 ]

3 голосов
/ 25 июня 2010

В VB вы говорите либо Public Function Whatever (params) As ReturnType (что совпадает с public ReturnType Whatever(params) в C #), либо Public Sub Whatever (params), что относится к вещам, которые ничего не возвращают (вернуть void в C ++ / C #).

Если ваша функция / подпрограмма принимает пользовательские типы, вам также необходимо объявить их эквиваленты .NET. Это может сделать PInvoke тяжелой работой. Могут помочь такие инструменты, как помощник по взаимодействию .

0 голосов
/ 25 июня 2010

Для пользовательских типов вам может потребоваться создать оболочку в управляемом C ++, которая может использовать как собственные API-интерфейсы C ++, так и предоставлять управляемые API-интерфейсы.Хотя это и датировано, здесь можно найти пошаговое руководство:

...