Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Строки и C Добавлено: 21.03.06 12:43  

Автор вопроса:  LamerOnLine | ICQ: 334781088 
Тема: есть C++ dll и приложение на VB.
Из VB передается строка. dll - ActiveX.
При Native dll при передаче ByVal передается LPSTR, при ByRef - BSTR*. В случае с ActiveX есть некоторые непонятки. В частности, надо при передаче строки как LPSTR определить - UNICODE она или ANSI, ибо передать в далее вызываемую функцию нужно (char*). SizeOf не канает.
Подскажите, а то седня вообще голова отключилась :)

Ответить

  Ответы Всего ответов: 13  

Номер ответа: 1
Автор ответа:
 GSerg



Вопросов: 0
Ответов: 1876


 Профиль | | #1 Добавлено: 21.03.06 12:57
Если dll - ActiveX, значит у неё внутри tlb.
Если у неё внутри tlb, в tlb параметр описан как char*, или как wchar_t, или ещё как, а может ещё и атрибут [string] повешен, а может и нет.
Но в любом случае VB будет читать tlb и замаршалит строку именно так, как написано в tlb. Хоть в ANSI, хоть в юникоде.
Посему - зырить описание метода на C. VB пришлёт именно то, что написано там в заголовке.

Ответить

Номер ответа: 2
Автор ответа:
 HOOLIGAN



Вопросов: 0
Ответов: 1066
 Профиль | | #2 Добавлено: 21.03.06 13:01
Это не определяется.

Ответить

Номер ответа: 3
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #3 Добавлено: 21.03.06 13:05
В idl метод описан как

[id(20), helpstring("method KeyPut";)] HRESULT KeyPut(SAFEARRAY (byte) *KeyBuffer, LPSTR KeyName, [out,retval] VARIANT_BOOL *Result);

VB то все нормально присылает, но вот как эта "норма" зависит от разрядности системы и локалей.
Нужно ли юзать MultiByteToWideChar...

Ответить

Номер ответа: 4
Автор ответа:
 GSerg



Вопросов: 0
Ответов: 1876


 Профиль | | #4 Добавлено: 21.03.06 14:11
Ы...

Нет конечно.

Ответить

Номер ответа: 5
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #5 Добавлено: 21.03.06 14:25
То бишь палюбому будет ANSI? Я в этой теме частенько путаюсь.

Ответить

Номер ответа: 6
Автор ответа:
 GSerg



Вопросов: 0
Ответов: 1876


 Профиль | | #6 Добавлено: 21.03.06 14:50
ANSI будет палюбому, потому что LPSTR.
Напишешь LPWSTR - будет палюбому юникод.

Ответить

Номер ответа: 7
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #7 Добавлено: 21.03.06 14:56
Ну, про LPWSTR это понятно. Просто, откровенно говоря, нет уверенности что LPSTR будет byte'сами. Можно, конечно, вставить проверку на sizeof(char), как мелкософты рекомендуют, но гемор...
Хотя я, видимо, просто перепил кофе :)

Ответить

Номер ответа: 8
Автор ответа:
 GSerg



Вопросов: 0
Ответов: 1876


 Профиль | | #8 Добавлено: 21.03.06 15:51
Перепил :)
Эта проверка имеет смысл на стадии компиляции :)

Ответить

Номер ответа: 9
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #9 Добавлено: 21.03.06 15:56
ЗЫ Вопрос в догонку - можно ли как LPSTR возвращать retval? Или в данном случае VB конвертацию не производит и требуется BSTR?

Ответить

Номер ответа: 10
Автор ответа:
 GSerg



Вопросов: 0
Ответов: 1876


 Профиль | | #10 Добавлено: 21.03.06 16:53
Мммм.... я так не делал, и edanmo в olelib тоже пишет BSTR*, так что проверь лучше.

Ответить

Номер ответа: 11
Автор ответа:
 Fever



Вопросов: 60
Ответов: 808
 Профиль | | #11 Добавлено: 21.03.06 21:43
Ууу. А кто может сделать статью: Перевод с C на VB?

Ответить

Номер ответа: 12
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #12
Добавлено: 21.03.06 22:18
Смысл? Вот обратное намного интереснее :)

Ответить

Номер ответа: 13
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #13 Добавлено: 22.03.06 11:46
Тут вообще то не про перевод с C на VB, а про их взаимодействие.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам