Форум программистов, компьютерный форум CyberForum.ru

Почему MessageBox пустой? (char *s <-> LPTSTR из "API - функции") - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Дано натуральное число. Определить значение наибольшей нечетной цифры в записи числа http://www.cyberforum.ru/cpp-beginners/thread1008863.html
Дано натуральное число. Определить значение наибольшей нечетной цифры в записи числа. Помогите пожалуйста.
C++ Программа, которая не реагирует на регистр букв Хочу написать программу на C++, которая не реагирует на регистр цифр. Например пользователь вводит страну, а программа должна показать столицу этой страны. Так вот программа, не должна реагировать на регистр букв. Как это сделать ? http://www.cyberforum.ru/cpp-beginners/thread1008851.html
C++ Указатель на конкретную область памяти
Есть такая программа ArtMoney, с её помощью мы ищем адрес в памяти, затем изменяем значение по указателю, чтобы изменить количество игровой валюты, здоровья и прочее. Так вот, если при помощи ArtMoney найти область памяти, которая отвечает за конкретное значение в игре, можно ли задать явно указателю адрес, затем изменить значение. Или у нас не будет доступа к этой области памяти? Я вроде как...
Задача из Лафоре C++
есть задачка из Лафоре -> Модифицируйте класс bMoney из упражнения 12 главы 7 «Массивы и стро-ки», включив арифметические операции, выполненные с помощью пере-груженных операций: bMoney = bMoney + bMoney bMoney = bMoney- bMoney bМоnеу = bMoney* long double (цена за единицу времени, затраченного на изделие) long double = bMoney/ bMoney(общая цена, деленная на цену за изделие) bMoney =...
C++ Найти число е http://www.cyberforum.ru/cpp-beginners/thread1008814.html
Найти тысячу знаков числа е используя разложение e = 1 +1/1!+1/2!+1/3!+... В с++
C++ Работа с пользовательскими функциями на языке С++ Здравствуйте! Написал несложную программу на С++. В данный момент времени попытался разбить ее на функции, но она неправильно работает - после разбивки на функции она выдает некорректный результат.Однако если все выражения описаны в одной главной функции main, то расчет правильный. Я думаю, что после разбивки на функции у меня неправильно организован вызов описанных в программе пользовательских... подробнее

Показать сообщение отдельно
krolig
0 / 0 / 0
Регистрация: 15.11.2013
Сообщений: 14

Почему MessageBox пустой? (char *s <-> LPTSTR из "API - функции") - C++

15.11.2013, 18:45. Просмотров 247. Ответов 0
Метки (Все метки)

Пишу под WinCC 7.0, C-Script.
На профильных форумах (WinCC), видимо, не сильны именно в С++ да и функция редкоиспользуемая попалась.

Использую библиотечную функцию из ODK:



Declaration
BOOL PWRTPermissionToString (
LONG perm,
LPTSTR string,
int bufsize )

Description
Determines the description text for an authorization level.

Parameters

perm
Authorization level whose description you want to obtain.

string
Pointer to the buffer to store the description

bufsize
Size of the buffer

Return value
TRUE
Description transmitted successfully.

FALSE
Description not found.

Required files
pwrt_api.h
pass_s.lib
useadmin.dll

Sample
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
//{{ODK_EXAMPLE}Gets a string associated with the permission number. (USE)}
//{{FUNCTION}PWRTPermissionToString (USE)}
//{{FUNCTION}(END)}
void CPWRTBunch::Pwrtpermissiontostring()
{
    BOOL bRet;
    CString csOut;
    CString csPermLevName;
    CGetText l_PermissionLevel("Insert the permission level number:");
    if(l_PermissionLevel.DoModal()==IDOK)
    {
        /////////////////////////////////////////////////////////////////////////////////////////
        bRet=PWRTPermissionToString(l_PermissionLevel.m_lNumber, csPermLevName.GetBuffer(1024), 1024);
        /////////////////////////////////////////////////////////////////////////////////////////
        if(!bRet)
        {
            m_pView->Print("ERROR: ", FSIZE_FUNCMARK);
            m_pView->Print("PWRTPermissionToString.\n", FSIZE_PARAMMARK, FALSE, TRUE);
            m_pView->Print("\n");
            return;
        }
        csOut.Format("PWRTPermissionToString( %ld, buffer )\n", l_PermissionLevel.m_lNumber);
        m_pView->Print(csOut, FSIZE_FUNCMARK, TRUE);
        m_pView->Print("Permission level name:\n", FSIZE_PARAMMARK, FALSE, TRUE);
        csOut.Format("buffer = \"%s\"\n", csPermLevName);
        m_pView->Print(csOut, FSIZE_SUBMARK);
        m_pView->Print("\n");
    }
}
//{{ODK_EXAMPLE}(END)}


В WinCC C-Stript отсутсвует CString. Поэтому я вынужден обходиться char[n] или char*.
Хотел подключить библиотеку для CString - никак не найду скачать необходимые файлы.
Написал на char* компилируется, но "Почему MessageBox выводится пустой?"!
Экспериментально я установил, что проблема в том, что PWRTPermissionToString не заполняет мою строку s.
Т. к. если вместо функции PWRTPermissionToString, выполнить просто s="sdfsf";, то "sdfsf" выводится нормально.
Даже пробовал буфера по [64] байта брать - не помогает.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include "apdefap.h" 
 void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName) 
 { 
    #pragma code ("UseAdmin.DLL") 
    #include "pwrt_api.h" 
    #pragma code () 
 
    char* s; 
 
    s=malloc(1024); 
    memset(s,0,1024); 
 
    if (PWRTPermissionToString(2, s, 1024)) 
    { 
       MessageBox(   GetForegroundWindow(), 
                           s, 
                           "LMS Confirmation", 
                           MB_OKCANCEL|MB_SETFOREGROUND); 
    } 
 
    free(s); 
 }
Варианты: 1) Или где скачать и какие файлы для подключения CString к WinCC C-Script.
2) Почему пустая строка, что не так, чего ещё попробовать, чтобы текст было видно?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru