Страница: 1 |
Вопрос: Строки и C | Добавлено: 21.03.06 12:43 |
Автор вопроса: ![]() |
Тема: есть C++ dll и приложение на VB.
Из VB передается строка. dll - ActiveX. При Native dll при передаче ByVal передается LPSTR, при ByRef - BSTR*. В случае с ActiveX есть некоторые непонятки. В частности, надо при передаче строки как LPSTR определить - UNICODE она или ANSI, ибо передать в далее вызываемую функцию нужно (char*). SizeOf не канает. Подскажите, а то седня вообще голова отключилась :) |
Ответы | Всего ответов: 13 |
Номер ответа: 1 Автор ответа: ![]() ![]() ![]() Вопросов: 0 Ответов: 1876 ![]() |
Профиль | Цитата | #1 | Добавлено: 21.03.06 12:57 |
Если dll - ActiveX, значит у неё внутри tlb.
Если у неё внутри tlb, в tlb параметр описан как char*, или как wchar_t, или ещё как, а может ещё и атрибут [string] повешен, а может и нет. Но в любом случае VB будет читать tlb и замаршалит строку именно так, как написано в tlb. Хоть в ANSI, хоть в юникоде. Посему - зырить описание метода на C. VB пришлёт именно то, что написано там в заголовке. |
Номер ответа: 2 Автор ответа: ![]() ![]() Вопросов: 0 Ответов: 1066 |
Профиль | Цитата | #2 | Добавлено: 21.03.06 13:01 |
Это не определяется. |
Номер ответа: 3 Автор ответа: ![]() ![]() ![]() ![]() ICQ: 334781088 Вопросов: 108 Ответов: 2822 |
Профиль | Цитата | #3 | Добавлено: 21.03.06 13:05 |
В idl метод описан как
[id(20), helpstring("method KeyPut" ![]() VB то все нормально присылает, но вот как эта "норма" зависит от разрядности системы и локалей. Нужно ли юзать MultiByteToWideChar... |
Номер ответа: 4 Автор ответа: ![]() ![]() ![]() Вопросов: 0 Ответов: 1876 ![]() |
Профиль | Цитата | #4 | Добавлено: 21.03.06 14:11 |
Ы...
Нет конечно. |
Номер ответа: 5 Автор ответа: ![]() ![]() ![]() ![]() ICQ: 334781088 Вопросов: 108 Ответов: 2822 |
Профиль | Цитата | #5 | Добавлено: 21.03.06 14:25 |
То бишь палюбому будет ANSI? Я в этой теме частенько путаюсь. |
Номер ответа: 6 Автор ответа: ![]() ![]() ![]() Вопросов: 0 Ответов: 1876 ![]() |
Профиль | Цитата | #6 | Добавлено: 21.03.06 14:50 |
ANSI будет палюбому, потому что LPSTR.
Напишешь LPWSTR - будет палюбому юникод. |
Номер ответа: 7 Автор ответа: ![]() ![]() ![]() ![]() ICQ: 334781088 Вопросов: 108 Ответов: 2822 |
Профиль | Цитата | #7 | Добавлено: 21.03.06 14:56 |
Ну, про LPWSTR это понятно. Просто, откровенно говоря, нет уверенности что LPSTR будет byte'сами. Можно, конечно, вставить проверку на sizeof(char), как мелкософты рекомендуют, но гемор...
Хотя я, видимо, просто перепил кофе ![]() |
Номер ответа: 8 Автор ответа: ![]() ![]() ![]() Вопросов: 0 Ответов: 1876 ![]() |
Профиль | Цитата | #8 | Добавлено: 21.03.06 15:51 |
Перепил ![]() Эта проверка имеет смысл на стадии компиляции ![]() |
Номер ответа: 9 Автор ответа: ![]() ![]() ![]() ![]() ICQ: 334781088 Вопросов: 108 Ответов: 2822 |
Профиль | Цитата | #9 | Добавлено: 21.03.06 15:56 |
ЗЫ Вопрос в догонку - можно ли как LPSTR возвращать retval? Или в данном случае VB конвертацию не производит и требуется BSTR? |
Номер ответа: 10 Автор ответа: ![]() ![]() ![]() Вопросов: 0 Ответов: 1876 ![]() |
Профиль | Цитата | #10 | Добавлено: 21.03.06 16:53 |
Мммм.... я так не делал, и edanmo в olelib тоже пишет BSTR*, так что проверь лучше. |
Номер ответа: 11 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 60 Ответов: 808 |
Профиль | Цитата | #11 | Добавлено: 21.03.06 21:43 |
Ууу. А кто может сделать статью: Перевод с C на VB? |
Номер ответа: 12 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Лидер форума ICQ: 216865379 Вопросов: 106 Ответов: 9979 |
Web-сайт: Профиль | Цитата | #12 | Добавлено: 21.03.06 22:18 |
Смысл? Вот обратное намного интереснее ![]() |
Номер ответа: 13 Автор ответа: ![]() ![]() ![]() ![]() ICQ: 334781088 Вопросов: 108 Ответов: 2822 |
Профиль | Цитата | #13 | Добавлено: 22.03.06 11:46 |
Тут вообще то не про перевод с C на VB, а про их взаимодействие. |
Страница: 1 |
|