BETA
Aby się zalogować, najpiew wybierz portal.
Aby się zarejestrować, najpiew wybierz portal.
Podaj słowa kluczowe
Słowa kluczowe muszą mieć co najmniej 3 sąsiadujące znaki alfanumeryczne
Pole zawiera niedozwolone znaki
User 113057
User 113057
15 pkt.
Nowicjusz

 
0


Czy ktos z was mial juz podobny problem. Staram sie w VC++ odpalic funkcje WInApi (dokladnie ExitWindowsEX)  i po dodaniu #include <windows,h> i po tym jak program sam uzupelnia mi kod to kompilator twierdi ze:
d:Visual Studio Projects urn_offForm1.h(95): error C3861: 'ExitWindowsEx': identifier not found, even with argument-dependent lookup
po prostu nie wiem co z tym fantem zrobic :(
moze macie jakies propozycje ??





User 131096
User 131096
189 pkt.
Junior
 
0


VC++ IDE samo potrafi uzupełniać kod w momencie, gdy jest odwołanie do funkcji, zmiennej, klasy czy metody, która została sparsowana przez środowisko edycji. To, że edytor sam z siebie pozwala na uzupełnianie kodu, nie oznacza wcale, że robi to w odpowiednim kontekście.
*Wydaje mi się*, że pomieszałeś kolejność dołączania plików nagłówkowych.1. Upewnij się, że w projekcie w żadnym momencie nie ma odwołań do "urn_offForm1.h" w sposób który by spowodował dojście w nim do linii 95 przed zaincludowaniem <windows.h>2. Upewnij się, że w pliku "urn_offForm1.h" korzysta z <windows.h> przed linią 95.
Jednym ze sposobów na ułatwienie sobie życia z plikami nagłówkowymi jest tworzenie ich wg następującej struktury:
#ifndef NAZWA_PLIKU_H#define NAZWA_PLIKU_H// Tutaj treść pliku nagłówkowego#endif
Dzięki takiemu rozwiązaniu możesz nawet po 10x dołączać te same pliki nagłówkowe do pojedynczego plików *.c*, bez tworzenia cyklicznych odwołań i redefinicji. To jest często stosowany workaround na kłopoty z plikami nagłówkowymi.
Polecam Ci C# - nie będziesz miał problemów z plikami nagłówkowymi, a dostęp do funkcji WinAPI masz w większości zapewniony na poziomie klas bazowych. Jeśli brak Ci dostępu do funkcji WinAPI, które nie mają wsparcia w samej platformie .NET, C#, VB.NET, czy Managed C++ posiadają mechanizmy pozwalające na ich wykorzystanie. Na CodeGuru jest kilka ciekawych artykułów na ten temat :).
HTH

User 113057
User 113057
15 pkt.
Nowicjusz
 
0


problem polega na tym ze tam nie bylo zdnych plikow naglokowych poza <windows>. Ten program w zalozeniach mial byc bardzo prosty. W sumie to moge uzyc C# tylko powiedz mi jak w nim wylaczyc komputer, bo ExitWindowsEx tu tez nie dziala. :(

User 79341
User 79341
39 pkt.
Poczatkujacy
 
0



prosty konsolowy programik :
#include "stdafx.h"
#include <windows.h>
int _tmain(int argc, _TCHAR* argv[])
{
ExitWindowsEx(EWX_SHUTDOWN , 0);
return 0;
}

User 131096
User 131096
189 pkt.
Junior
 
0



using System;using System.Runtime.InteropServices;namespace ConsoleApplication1{  class Class1  {    [DllImport("user32.dll")]    public static extern bool ExitWindowsEx(uint uFlags, ulong dwReason);    private const uint EWX_LOGOFF = 0x00000000;    private const uint EWX_FORCE = 0x00000004;    [STAThread]    static void Main(string[] args)    {      ExitWindowsEx(EWX_LOGOFF | EWX_FORCE, 0);    }  }}
To wygląda trochę na czary-mary, ale już tłumaczę, po kolei i bardzo prostymi słowami ;).
Przestrzeni nazw System.Runtime.InteropServices należy użyć, by móc korzystać z bibliotek niedotnetowych.Atrybut DllImport przed nazwą zewnętrznej metody umożliwia wykorzystanie metod (funkcji) z tych bibliotek.Plik DLL "user32.dll" - spójrz do dokumentacji MSDN metody ExitWindowsEx i zobacz, w jakiej bibliotece się ona znajduje - to właśnie ta biblioteka.Stałe, które zdefiniowałem odpowiadają temu, co znajdziesz w pliku nagłówkowym <WinUser.h> w Platform SDK dla VC7 - określają to, jakie flagi przyjmuje dana funkcja WinAPI.
Flagi, które przekazałem tutaj są jak najbardziej przykładowe - zachęcam Cię do własnych badań ;). Gdy sam znajdziesz flagi, które Ci są potrzebne raz - będziesz wiedział jak zrobić to w przyszłości.
Hint: u mnie plik znajduje się tutaj:%VSROOT%\Vc7\PlatformSDK\Include\WinUser.h
Niestety, z uwagi na to, jak zaprojektowany jest .NET, powyższą procedurę musisz powtarzać dla każdego wywołania funkcji WinAPI, która nie ma własnej "owijki" w .NET. Jednak spójrz na to z drugiej strony - za pomocą tego mechanizmu możesz zrobić dosłownie wszystko, co udostępniają funkcje WinAPI i wszystkie zarejestrowane w systemie biblioteki.

User 131096
User 131096
189 pkt.
Junior
 
0


Ups. Przepraszam za wielkość czcionki... Wklejanie kodu z Visual Studio coś miesza w edytorze na stronie...

User 113057
User 113057
15 pkt.
Nowicjusz
 
0


dzieki sam bym na to chyba nigdy nie wpadl. A mzoesz mi poweidziec czy podobne czay-mary trzeba uczynic w VC++. Bo teroertycznie to nie powinno byc zadnych problemow, ale jakos dziwnie nie dziala.
 

User 131096
User 131096
189 pkt.
Junior
 
0


Niestety, Szymon, nie mam doświadczenia w Managed C++. Powinno to się dać zrobić, zgodnie ze składnią Managed C++, czyli pewnie nawet będzie to identyczna linijka, jak w C#, za wyjątkiem tego, że typy dla C++ pozostaną takie same jak wyczytasz w MSDN :). Strzelam w tej chwili - sprawdź - jest szansa, że się nie mylę. :)

User 131096
User 131096
189 pkt.
Junior
 
0


Sprostowanie. Managed C++ nie istnieje. Istnieją Managed Extensions for C++. Zmyliła mnie nazwa :), a jak pisałem - doświadczenia nia mam, nie próbowałem używać Managed Extensions for C++, więc strzeliłem babola.
Pozdrawiam, zawstydzony :}

Udziel odpowiedzi

pkt.
Treść wpisu:

Zaloguj się lub Zarejestruj się aby wykonać tę czynność.