С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
krolig
0 / 0 / 0
Регистрация: 15.11.2013
Сообщений: 14
1

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

15.11.2013, 18:45. Просмотров 310. Ответов 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) Почему пустая строка, что не так, чего ещё попробовать, чтобы текст было видно?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.11.2013, 18:45
Ответы с готовыми решениями:

Ошибка: "char *concat(char *,.)": невозможно преобразовать аргумент 1 из "const char [4]" в "char *"
делал задание, но на строке 36 строке пишет, что &quot;char *concat(char *,...)&quot;: невозможно...

Значение типа "const char *" нельзя использовать для инициализации сущности "char*"
Книга Пратта, Лекции и Упражнения. 750 страница, листинг 14.8. В объявлении производного класса,...

Ошибка 6 error C2664: strtok: невозможно преобразовать параметр 1 из "const char *" в "char *"
string s = &quot;555 44 55 66&quot;;//размер строки заранее неизвестен char* p =...

error C2664: strcmp: невозможно преобразовать параметр 1 из "char (*)[20]" в "const char *"
for(int i = 0; i&lt; 5; i++) { wr_struc (list); if (strcmp(&amp;list.Sostav,osn_sostav)==0 &amp;&amp;...

Error C2440: инициализация: невозможно преобразовать "const char [12]" в "char *"
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; void...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.11.2013, 18:45

Не открывается библиотека 'stdafx.h' и "char" не работает с параметром "char*"
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;stdio.h&gt; #include &lt;cstring&gt; using namespace...

IntelliSense: несовместимые типы операндов ("char" и "const char *")
привет всем! при таком коде: void main() { ifstream fin; ofstream fout;...

Невозможно преобразовать аргумент 1 из "const char" в "char *"
Задание прикрепила ниже картинкой. Пробежалась по форуму похожего не нашла. Никак не могу...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

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