Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Передача строки в процедуру, так и не понял в чем ошибка 
:(
    Опции темы
Yak
Дата 5.11.2005, 22:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 2.11.2005

Репутация: нет
Всего: нет



Короче такая хрень получается - из библиотеки "NtDll_call.dll" (написанной в VC++) в процедуру "lpproc" программы, написанной на VB6.0 передается строка "strTxt". Строка обьявляется как
Код
 CHAR strTxt = (pProcesses->ProcessName.Buffer); 

и содержит имя текущего процесса. Так вот при попытке передать ее в процедуру VB6.0 таким образом:
Код
pfnEnumProc(strTxt, pProcesses->ProcessId, lParam, WParam);

сам VB просто падает при обращении к этой(pszProcessName) переменной с хз какой ошибкой, а если передать эту строку так:
Код
pfnEnumProc(&strTxt, pProcesses->ProcessId, lParam, WParam);

в процедуру VB уходит какой то набор символов.

Процедура в VB:
Код
Function lpproc(ByVal [b]pszProcessName[/b] As String, ByVal dwProcessId As Long, ByVal lParam As Long, ByVal WParam As Long) As Long

и так она обьявлена в библиотеке VC++
Код
typedef BOOL (CALLBACK * PFNENUMPROC)(IN CHAR pszProcess, IN DWORD dwProcessId, IN LPARAM lParam, IN USHORT WParam);

самое интересное, что если обьявить эту строку не как CHAR, а как другой текстовый тип, то в VB не приходит пустая строка, хотя из VC++ эту строку видно как надо.

P.S. Если кто нить понял, что я тут нагородил)))))), то скажите где у мя здесь ошибка? И какой текстовой тип VC++ передастся без проблем в VB String?

P.P.S. Не надо ща советовать "пиши все на VC++ и не парься"... Просто в VB мне гораздо проще и быстрее составлять внешний вид программы, а на VC++ - исполняемые модули, где много коду...

PM MAIL   Вверх
np9mi7
Дата 6.11.2005, 19:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 553
Регистрация: 17.8.2003
Где: Volgograd, Russia

Репутация: 5
Всего: 10



Что ты хочешь сделать? Опиши откуда, что вызывать собрался... А то ничего не понятно...


--------------------
"Я точно знаю то, что ничего не знаю..." Сократ.
evolution project
PM MAIL WWW ICQ MSN   Вверх
maxim1000
Дата 6.11.2005, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 17
Всего: 110



Цитата
CHAR strTxt

это опечатка?
если нет, то char в C++ обозначает символ и ничего больше
строка, обычно, представляется указателем на char:
char*


--------------------
qqq
PM WWW   Вверх
Yak
Дата 6.11.2005, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 2.11.2005

Репутация: нет
Всего: нет



Если покороче сказать (нашел как это называется))))), то не знаю как передать значение как например в станд ф-ции GetWindowText(), т. е. как буфер, чтоб туда передаешь пустую строку, а она возвр строку с именем процесса. А вот как эт реализовать?
PM MAIL   Вверх
maxim1000
Дата 6.11.2005, 22:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 17
Всего: 110



просто выделить буфер нужного размера (объявлением массива или с помощью new) и дальше передавать этот указатель куда надо


--------------------
qqq
PM WWW   Вверх
np9mi7
Дата 6.11.2005, 22:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 553
Регистрация: 17.8.2003
Где: Volgograd, Russia

Репутация: 5
Всего: 10



Цитата
int GetWindowText(     

    HWND hWnd,
    LPTSTR lpString,
    int nMaxCount
);


Цитата
lpString
    [out] Pointer to the buffer that will receive the text. If the string is as long or longer than the buffer, the string is truncated and terminated with a NULL character.


http://msdn.microsoft.com/library/default....twindowtext.asp

lpString - это нуль терминированная строка. Как написал maxim1000 делаешь так:
Код

std::vector <char> vcWindowsText (256);            /// буфер под строку
GetWindowText (/*Windows Handle*/, 
    &vcWindowsText.front (), vcWindowsText.size ());/// получение текста с окна



--------------------
"Я точно знаю то, что ничего не знаю..." Сократ.
evolution project
PM MAIL WWW ICQ MSN   Вверх
maxim1000
Дата 7.11.2005, 02:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 17
Всего: 110



я бы не стал использовать здесь std::vector
дело в том, что (если я не ошибаюсь) стандарт не гарантирует, что элементы вектора будут храниться последовательно
да, пожалуй, это наиболее логичный способ его реализовывать, но не стоит гадать, как производитель STL это сделал
мне кажется, что лучше все-таки на этом уровне использовать char s[256]
а потом приводить его к std::vector, если надо...


--------------------
qqq
PM WWW   Вверх
srd
Дата 7.11.2005, 04:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нереварин
**


Профиль
Группа: Участник Клуба
Сообщений: 951
Регистрация: 30.8.2003
Где: Владивосток

Репутация: 27
Всего: 49



Цитата(maxim1000 @ 7.11.2005, 09:07)
я бы не стал использовать здесь std::vector
дело в том, что (если я не ошибаюсь) стандарт не гарантирует, что элементы вектора будут храниться последовательно

В отличие от std::string, для вектора гарантируется стандартом последовательное расположение элементов в памяти.


--------------------
Не смей читать мою подпись!!!
PM MAIL Jabber   Вверх
maxim1000
Дата 7.11.2005, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 17
Всего: 110



Цитата
В отличие от std::string, для вектора гарантируется стандартом последовательное расположение элементов в памяти

упс... значит, ошибся...


--------------------
qqq
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0524 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.