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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
krolig
0 / 0 / 0
Регистрация: 15.11.2013
Сообщений: 14
#1

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

15.11.2013, 18:45. Просмотров 234. Ответов 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) Почему пустая строка, что не так, чего ещё попробовать, чтобы текст было видно?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.11.2013, 18:45     Почему MessageBox пустой? (char *s <-> LPTSTR из "API - функции")
Посмотрите здесь:

C++ Невозможно преобразовать "const char" в "char"
C++ cannot convert "char *" to "char"....
C++ Ошибка: "invalid conversion from char* to char"
C++ Призапуске не происходит не чего... Просто пустой экран с надписью"нажмите кнопку для продолжения"
C++ invalid conversion from "const char*" to "char"
C++ error LNK2019: ссылка на неразрешенный внешний символ "public: int __thiscall KDocument::Open(char const *)" в функции _WinMain@16
"const char" в "int" C++
C++ Почему программа "падает" на функции заполнения дерева?
C++ C++ ошибка "Cannot convert 'char *' to char"
C++ Почему переменная "d" не была удалена из стека после выхода из функции?
C++ Пустой оператор "int a;"?
C++ Несовместимые типы операндов "char" и "const char*"

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru