Externer Process????



  • Das mit der 16Bit-Version hab ich wohl übersehen. 😃
    Nur mit ShellExecute() hab ich den selben Fehler.
    Habe auch die Headerdatei shellapi.h includet und die Import library shell32.lib gelinkt.

    TestDLL error LNK2019: Nicht aufgelöstes externes Symbol '"void * __stdcall ShellExecuteA(void *,char const *,char const *,char const *,char const *,int)" (?ShellExecuteA@@YGPAXPAXPBD111H@Z)', verwiesen in Funktion '"int __cdecl DLLCall(char *,char *)" (?DLLCall@@YAHPAD0@Z)'



  • Was für eine IDE verwendest Du denn? Ich vermute mal kein MS-VC, oder?
    Du hast nämlich das ShellExecute als C++-Funktion deklariert. Das ist aber eine C-Funktion (extern "C").



  • Ich verwende eigendlich schon MS VC++. 🙄

    Hättest du da nicht ein Beispiel dazu wie ich die ShellExecute oder auch eine andere Funktion in mein Prog. als c++ statt c-Funktion deklarieren könnte?



  • Normalerweise reicht es aus, wenn Du die windows.h einbindest... warum er bei Dir aber C++ macht ist mir Rätselhaft...



  • Kann ich der Funktion irgendwie explizit eintrichtern das sie in der shell32.lib zu finden ist?
    Suchen tut sie nämlich nicht da, sondern in Headerdatei der DLL.
    Fehlt da vielleicht noch was?

    //===>   Header
    #ifdef TESTDLL_EXPORTS
    #define TESTDLL_API __declspec(dllexport)
    #else
    #define TESTDLL_API __declspec(dllimport)
    #endif
    class TESTDLL_API CTestDLL {
    public:
    	CTestDLL(void);
    };
    TESTDLL_API int DLLCall(char* arg1);
    
    #include <windows.h>
    #include "stdafx.h"
    #include "TestDLL.h"
    #include "shellapi.h"
    
    #pragma comment(lib, "kernel32.lib")
    #pragma comment(lib, "shell32.lib")
    
    	DLLCall(char* arg1)
    	{
    		ShellExecute(NULL, "open", arg1, NULL, NULL, SW_HIDE);
    		return true;
    	}
    

    lounsome



  • Ich kann einen anderen Process starten, nur beendet sich der erste dann sofort.
    Wie könnte ich das umgehen? 😡

    char hilf01[] = "C:\\Progr.EXE";
    char *args[] = {hilf01,"","",NULL};
    execv(hilf01,args); //auch bei anderen Varianten von exec und spawn
    


  • Verwende CreateProcess und warte auf das Process-Handle.
    Du kannst auch spawn mit _P_WAIT verwenden... oder system...



  • Vielen Dank Jochen hast mir sehr geholfen! 🙂

    Hätte nur noch eine Frage:
    Was könnte im schlimmsten Fall passieren, wenn ich eine 16-Bit Funktion auf `ner 32-Bit Umgebung nutze?

    spawnv(P_WAIT,.....);
    

    ist ja eine 16-Bit-Funktion. Oder?



  • Wie kommst Du auf die Idee, dass dies eine 16-Bit Funktion ist?
    Es ist eine CRT Funktion...



  • OK, 🙄
    Hab ich nicht gewusst.


Anmelden zum Antworten