Release der .exe verlangt DLL



  • Guten Morgen!

    Ich habe mir ein kleines Tool geschrieben welches mir das Arbeiten mit ftp-links
    vereinfachen soll. Dieses Tool funktioniert einwandfrei, doch möchte ich es an
    meine Team-Mitglieder weitergeben. Bis vor kurzem war es kein Problem für mich,
    doch seit neuem verlangt die Release auf den anderen PC´s dann DLL´s wie
    "msvcr100.dll". Liefere ich diese DLL mit, wird diese jedoch als keine zulässige
    Windows-Datei erkannt. Selbst wenn die aktuelle Redistributable Package von Microsoft installiert wird kommt wiederum dass diese dll fehlt.

    Damit ihr euch mal n´Überblick über das Tool machen könnt:

    #include <Windows.h>
    #include <stdio.h>
    #include <string.h>
    
    #define MAX_LINK_LENG 300
    
    void DeleteCpyPreLink(char link[], char cpyPreLink[]);
    
    char * getStringFromClipboard(char cpyPreLink[])
    {
       int ok = OpenClipboard(NULL);
       char * cBuffer = NULL;
    
       if (!ok) return NULL;
    
       HANDLE hClipData = GetClipboardData( CF_TEXT );
       cBuffer = (char*)GlobalLock( hClipData );
       GlobalUnlock( hClipData );
       CloseClipboard();
    
       if(strlen(cBuffer)>MAX_LINK_LENG || strlen(cBuffer) <= strlen(cpyPreLink))
    	   cBuffer[0]='\0';
    
       return cBuffer;
    } 
    
    void copyToClipboard(const char *str) 
    { 
        if(!OpenClipboard(NULL)) 
            return; 
    
        EmptyClipboard(); 
    
        HGLOBAL hClipboardData; 
        hClipboardData = GlobalAlloc(GMEM_DDESHARE, strlen(str)+1); 
    
        char *pchData; 
        pchData = (char*)GlobalLock(hClipboardData); 
        strcpy(pchData, str); 
    
        GlobalUnlock(hClipboardData); 
    
        SetClipboardData(CF_TEXT, hClipboardData); 
    
        CloseClipboard(); 
    } 
    
    int main(void){
    
    	char cpylink[MAX_LINK_LENG];
    	char prelink[]="http://";
    	char pastlink[MAX_LINK_LENG];
        char cpyPreLink[]="**********"; // link aufgrund von Datenschutz entfernt
    
    	while(1){
    		strcpy(cpylink, getStringFromClipboard(cpyPreLink));
    		if(strstr(cpylink, cpyPreLink)){
    			strcpy(pastlink, prelink);
    			DeleteCpyPreLink(cpylink, cpyPreLink);
    			strcat(pastlink, cpylink);
    			copyToClipboard(pastlink);
    			cpylink[0]='\0';
    			pastlink[0]='\0';
    		}
    		Sleep(500);
    	}
    
    	return 0;
    }
    
    void DeleteCpyPreLink(char link[], char cpyPreLink[]){
    
    	int i;
    	int PreLeng=strlen(cpyPreLink);
    
    	for(i=0; i<=strlen(link)-PreLeng; i++){
    		link[i]=link[i+PreLeng];
    	}
    
    }
    

    Könnt ihr mir weiterhelfen?

    Gruß
    ITEDVO



  • Das Redistributable Package muss in dem gleichen Service Pack Stand sein.





  • Und dass heißt für mich?

    @_matze: Ich benötige dieses Package ja nicht, da ich ja schon die VS2010 Ultimate besitze. Jedoch haben die Team-Mitglieder wirklich für ihr jeweiliges
    OS (ob x64 oder x82) das jeweilige Package runtergeladen und installiert.



  • itedvo schrieb:

    Und dass heißt für mich?

    Für welche Plattform hast du kompiliert?
    Welche Visual Studio Version hast du und sind Service Pack dafür installiert?



  • itedvo schrieb:

    Und dass heißt für mich?

    Dass noch diese beiden Möglichkeiten dazu kommen:

    http://www.microsoft.com/downloads/de-de/details.aspx?FamilyID=c32f406a-f8fc-4164-b6eb-5328b8578f03

    http://www.microsoft.com/downloads/de-de/details.aspx?FamilyID=c68ccbb6-75ef-4c9d-a326-879eab4fcdf8

    Abhängig davon, ob du bei VS das Service Pack installiert hast, musst du halt die richtige Version auswählen.


  • Mod

    itedvo schrieb:

    Und dass heißt für mich?

    Das Du das entsprechend herunterladen und installieren musst.
    Oder Du linkst statisch.
    http://blog.kalmbach-software.de/de/2008/03/05/wie-man-statisch-gegen-die-c-runtime-crt-linkt/



  • Ich habe, wie oben editiert: VS2010 Ultimate (keine SP´s) und programmiere für
    Windows.



  • Ich habe jetzt versucht statisch zu linken, jedoch zeigt er mir jetzt folgende
    fehler beim Neu erstellen an:

    1>main.obj : error LNK2001: Nicht aufgelöstes externes Symbol "__imp__SetClipboardData@8".
    1>main.obj : error LNK2001: Nicht aufgelöstes externes Symbol "__imp__OpenClipboard@4".
    1>main.obj : error LNK2001: Nicht aufgelöstes externes Symbol "__imp__EmptyClipboard@0".
    1>main.obj : error LNK2001: Nicht aufgelöstes externes Symbol "__imp__GetClipboardData@4".
    1>main.obj : error LNK2001: Nicht aufgelöstes externes Symbol "__imp__CloseClipboard@0".
    1>C:\Users\ITEDVO\Documents\Visual Studio 2010\Projects\ClipBoard_test\Release\ClipBoard_test.exe : fatal error LNK1120: 5 nicht aufgelöste externe Verweise.
    


  • Hab den Fehler gefunden, die MFC hätte ich lassen sollen wie sie war! Danke für
    die Lösungsvorschläge, das statische Linken war die einfachere Lösung.



  • itedvo schrieb:

    Und dass heißt für mich?

    @_matze: Ich benötige dieses Package ja nicht, da ich ja schon die VS2010 Ultimate besitze. Jedoch haben die Team-Mitglieder wirklich für ihr jeweiliges
    OS (ob x64 oder x82) das jeweilige Package runtergeladen und installiert.

    Die müssen nicht abhängig von ihrem OS, sondern abhängig von deiner exe das 32 oder 64 Bit Redistributable installieren. Das könnte der Fehler gewesen sein.



  • Ok, jetzt jedoch etwas anderes zum Thema. Mir ist gerade aufgefallen, dass wenn
    das Fenster nicht aktiv ist, sprich ich es nicht anklicke nach dem ich einen Link
    kopiert habe, dieser auch nicht entsprechend formatiert wird. Kann ich dies nicht auch bei einem inaktiven Fenster machen?


Log in to reply