lineTranslateAddress c ++ для управляемого c # - PullRequest
1 голос
/ 12 мая 2011

У меня есть приложение, которое программно звонит на разные номера.Приложение написано на c # (управляемом), и я использую pInvoke для функций C ++ TAPI.Все работает отлично, за исключением того факта, что мне нужно преобразовать номер телефона в набираемый формат.

Чтобы сделать это преобразование, я должен использовать функцию C ++ lineTranslateAddress , но из C #.Кто-нибудь использовал эту функцию из управляемого кода и может предоставить мне несколько примеров или хотя бы объяснений.

Может быть, есть некоторые указания, как маршалировать / nmarshall последнее поле

LPLINETRANSLATEOUTPUT lpTranslateOutput

Следует также отметить, что приложение предназначено для интеллектуальных устройств.

Спасибо,

Ответы [ 2 ]

2 голосов
/ 24 мая 2011

Я использовал этот пример кода, и он работает

[DllImport("coredll", SetLastError = true)]
extern public static int lineTranslateAddress(
    IntPtr hLineApp,
    int dwDeviceID,
    int dwAPIVersion,
    string lpszAddressIn,
    int dwCard,
    int dwTranslateOptions,
    byte[] lpTranslateOutput
    );
0 голосов
/ 12 мая 2011

Я работал с TAPI в C # несколько раз, и я настоятельно рекомендовал бы использовать Runtime Callable Wrapper (RCW) вместо использования Platform Invoke. C:\windows\system32\tapi3.dll можно добавить в качестве ссылки на проект, и VS автоматически сгенерирует сборку взаимодействия, которую можно использовать для работы с классами и функциями.

Таким образом, вы сможете с легкостью вызывать функцию lineTranslateAddress; через интерфейс ITAddressTranslation.

Примечание. Даже если ваш TSP соответствует только TAPI 2.x, вы все равно можете использовать функциональность в tapi3.dll (при условии, что вы вызываете только подмножество функций, поддерживаемых TAPI 2)

...