verknüpfung erstellen...
-
Martin Richter schrieb:
Sag mal kannst Du icht die Samples mal ansehen, die ich dir gegeben habe?
ich hab mir die samples angeschaut,bevor ich meinen Beitrag erstellt habe
Mein VC++ 2003 kennt keine CreateShortcut() (siehe Beitrag von oben)
#include <Shortcut.h> <-Problem (siehe Beitrag von oben)
-
Also der Code in diesem Artikel z.B.:
http://www.codeproject.com/KB/shell/create_shortcut.aspx
ist einfach in dem Artikel! Da gibt es keine Header.In dem zweiten Artikel ist der Header mit in dem ZIP!
http://www.codeproject.com/KB/shell/CShortcut.aspx
Wo hast Du den bitte hin kopiert?Wo ist Dein Problem?
Wo bitte erwartest Du einen Header der so heißt?
-
ok,
void Clookund::OnBnClickedButton15() { LPCTSTR lpszFileName = _T("C:\\Work\\Window.exe"); LPCTSTR lpszShortcutDesc = _T("Anything can go here"); LPCTSTR lpszShortcutPath = _T("C:\\Documents and Settings\\Administrator\\Desktop\\Sample Shortcut.lnk"); CreateShortcut(lpszFileName, lpszShortcutDesc, lpszShortcutPath); }
error C3861: 'CreateShortcut': identifier not found, even with argument-dependent lookup
wo liegt der Fehler?
-
Ich würde anfangen bei
1. add the files Shortcut.h and Shortcut.cpp to your project and Include the header
-
#include shortcut.h <- gibt es nicht
-
Martin Richter schrieb:
In dem zweiten Artikel ist der Header mit in dem ZIP!
http://www.codeproject.com/KB/shell/CShortcut.aspxDadrin kannst du dir den Source holen und dadrin gibts dann logischerweise Shortcut.cpp und Shortcut.h !
-
thx all...
ok,demo runtergeladen und ziemlich alles abgeschnitten.
Wird die Funktion aufgerufen,wird ein icon erstellt.
Jetzt hab ich das Problem,wenn ich den schnipsel in mein Projekt einfüge,bringt er 2 Fehler.IShellLink* psl; CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (LPVOID*) &psl); IPersistFile* ppf; psl->SetPath("c:\\Dokumente und Einstellungen\\tomtom\\Eigene Dateien\\Visual Studio Projects\\demo_II\\Debug\\Shortcut Demo.exe"); psl->SetDescription("sExePath"); //Die beschrei psl->QueryInterface(IID_IPersistFile, (LPVOID *)&ppf); WORD wsz[MAX_PATH]; MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, "C:\\Dokumente und Einstellungen\\tomtom\\Desktop\\ddd.lnk", -1, wsz, MAX_PATH); psl->SetIconLocation("C:\\WINDOWS\\system32\\shell32.dll", 1); // Pfad /INDEX !!!! ppf->Save(wsz, TRUE); ppf->Release(); psl->Release();
error C2664: 'MultiByteToWideChar' : cannot convert parameter 5 from 'WORD [260]' to 'LPWSTR' 'IPersistFile::Save' : cannot convert parameter 1 from 'WORD [260]' to 'LPCOLESTR'
-
WCHAR wsz[MAX_PATH];
-
eingefügt und erbringt keine Fehler.
WEnn ich auf den Knpf drücke kommt.
Fatal Error.psl->SetPath("c:\\Dokumente und Einstellungen\\tomtom\\Eigene Dateien\\Visual Studio Projects\\demo_II\\Debug\\Shortcut Demo.exe");
-
Den Debugger kennst Du?
-
vc++ 2003 studio
-
Das hat auch schon einen. Also Schritt für Schritt durchgehen, Fehlercodes abfragen und auf NULL-Zeiger prüfen. Ich glaube nicht, dass Dir das jemand abnehmen wird.
-
das komische ist,der schnipsel geht im dem Demo, los nicht in meinem Projekt, ich scheck das mal.
-
Kleiner Tipp: Rückgabewert von CoCreateInstance prüfen. Der sollte eigentlich alles aussagen.
-
CoCreateInstance gehört in ein MFC Programm nur, wenn man wirlich weiß was man macht ;).
Innerhalb der MFC sollte man nur AfxOleInit() verwenden... sicher es gibt seltene Ausnahmen...
-
Martin Richter schrieb:
CoCreateInstance gehört in ein MFC Programm nur, wenn man wirlich weiß was man macht ;).
Innerhalb der MFC sollte man nur AfxOleInit() verwenden... sicher es gibt seltene Ausnahmen...
Ich bezweifle, dass man COM-Objekte in der MFC mit AfxOleInit() erstellen kann.
-
sri schrieb:
Ich bezweifle, dass man COM-Objekte in der MFC mit AfxOleInit() erstellen kann.
Und warum tust Du das? Weißt Du wirklich von was Du redest?
AfxOleInit ist ein per Thread Wrapper für ::OleInitialize(NULL); (siehe link unten).
Zudem sorgt AfxOleInit dafür, dass bei Beenden des Threads automatisch AfxOleTerm aufgerufen wird.::OleInitialize(NULL) ist ein Wrapper für den Aufruf von CoInitializeEx im STA Kontext:
Siehe MSDN
http://msdn.microsoft.com/en-us/library/ms690134(VS.85).aspxOleInitialize calls CoInitializeEx internally to initialize the COM library on the current apartment. Because OLE operations are not thread-safe, OleInitialize specifies the concurrency model as single-thread apartment.
Die MFC benutzt und verlangt genau diesen STA Modus. Sofern man also nicht wirklich weiß was man mit CoInitializeEx macht, sollte man es in der MFC vermeiden.
Siehe auch MSDN Doku zu AfxOleInit:
http://msdn.microsoft.com/de-de/library/e91aseaz(VS.80).aspxMFC applications must be initialized as single threaded apartment (STA). If you call CoInitializeEx in your InitInstance override, specify COINIT_APARTMENTTHREADED (rather than COINIT_MULTITHREADED). For more information, see PRB: MFC Application Stops Responding When You Initialize the Application as a Multithreaded Apartment (828643) at http://support.microsoft.com/default.aspx?scid=kb;en-us;828643.
-
Du hast in deinem Beitrag vorher CoCreateInstance und OleInitialize vermischt.
-
Nein Ich habe CoInitialize(Ex) mit CoCreateInstance verwechselt...
Sorry! Argh... Manchmal sollte man etwas mehr nachdenken oder genauer lesen...
Entschuldigung!
-
Danke für die erhellenden Links zu MFC und MTA.
CoInitializeEx habe ich bisher noch nie verwendet. Wenn ein Arbeitsthread COM benötigt, dann verwende ich immer CoInitialize am Anfang bzw. Ende der Thread-Funktion. OleInitialize initialisiert ja noch einiges mehr, was aber in der Regel im Arbeitsthread nie gebraucht wird.