1 exe, même params, 2 résultats !

Signaler
Messages postés
573
Date d'inscription
samedi 16 novembre 2002
Statut
Membre
Dernière intervention
9 avril 2008
-
Messages postés
54
Date d'inscription
jeudi 20 novembre 2003
Statut
Membre
Dernière intervention
4 avril 2007
-
Salut,



J'ai fait un programme qui visualise des fichiers de scenes 3D.

Le chargement de la scene se fait ainsi.



g_pScene->LoadScene(strInputName);



avec strInputName le nom absolu du fichier à charger.





Si je lance l'exe par double clique, je veux qu'on me demande quel fichier charger.

Si le deplace un fichier sur l'icone de l'exe, je veux que le fichier soit chargé.



Donc j'ai fait préalabrement:







char strInputName[MAX_PATH];

memset(strInputName, 0, MAX_PATH);



// Get input

if (*lpCmdLine == 0)

{

strcat(strInputName, "*.mcf");

if (GetFileName( strInputName,



"Select a Mesh Concept File",



"Mesh Concept File (*.mcf)\0",



OFN_FILEMUSTEXIST ) == FALSE)

return 0;

}

else

{

// Get elements

char* pStr = lpCmdLine;



while (*pStr)

{

if (*(pStr++) == '"')

{

char* pStart = pStr;


while (*pStr != '"' && *pStr != 0) { pStr++;}

*pStr = 0;



memcpy(strInputName, pStart, DWORD(pStr-pStart));

}

}

}







Bref, je charge un même fichier dans les 2 cas, les strInputName sont IDENTIQUES.

Pourtant le résultat à l'écran est DIFFERENT (manque les textures si drag and drop) !



Quelles lignes de code ci-dessus sont suceptibles de modifier des valeurs qui ruinent le chargement des textures.

J'utilise DirectX 9.0c mais pas la peine de taper dessus.





Merci !



PS:

BOOL GetFileName(char* pszFileName, char* pszTitle, char* pszFilter, DWORD dwFlags)

{



OPENFILENAME ofn;

ZeroMemory(&ofn, sizeof(ofn));



ofn.lStructSize = sizeof(OPENFILENAME);

ofn.hwndOwner = NULL;

ofn.lpstrFilter = pszFilter;

ofn.nFilterIndex = 1;

ofn.lpstrFile = pszFileName;

ofn.lpstrFileTitle = NULL;

ofn.nMaxFileTitle = MAX_PATH;

ofn.nMaxFile = MAX_PATH;

ofn.lpstrTitle = pszTitle;

ofn.Flags = dwFlags;



if (GetOpenFileName(&ofn) != TRUE)

return FALSE;

return TRUE;

}

7 réponses

Messages postés
573
Date d'inscription
samedi 16 novembre 2002
Statut
Membre
Dernière intervention
9 avril 2008
1
Dernières nouvelles,



Ce n'est pas la faute des lignes de codes mais uniquement du drag and drop !



En quoi le drag and drop empêche directX de charger des textures ???
Messages postés
99
Date d'inscription
mercredi 12 mai 2004
Statut
Membre
Dernière intervention
29 mars 2006

a mon avis fait des recherches du coté du repertoire ou il va chercher
les textures. Dans le cas du drag and drop le repertoire par defaut du
programe n'est pas forcémént celui ou il y a les textures. Essaye de ne
pas utiliser les répertoires rélatifs.
Messages postés
573
Date d'inscription
samedi 16 novembre 2002
Statut
Membre
Dernière intervention
9 avril 2008
1
Merci, effectivement les noms des textures sont sauvegardés sous nom relatif à partir du dossier de l'exe.

Mais le fichier dragged and dropped belongs to ... heu appartient au
même répertoire que l'exe. Donc normalement pas de confusion possible.



Je vais faire des essais en déplaçant les textures dans le cas ou le répertoire par défaut soit inattendu.
Messages postés
54
Date d'inscription
jeudi 20 novembre 2003
Statut
Membre
Dernière intervention
4 avril 2007

salut Galmiza,
if (*(pStr++) == '"')
il n'y a pas de guillement dans le nom du fichier "drag&dropé".

proposition pour un seul fichier :

char* pStart = lpCmdLine;
char* pStr = lpCmdLine;
if(*pStr)
{
while(*pStr) pStr++;
memcpy(strInputName, pStart, pStr - pStart);
}

vangeurmasker:
"Dans le cas du drag and drop le repertoire par defaut du programe n'est pas forcémént celui ou il y a les textures"

Effectivement, GetCurrentDirectory renvoie C:\Document and Settings\UserName en cas de drag&drop sinon renvoie le dossier de l'exe...

bye.
Messages postés
573
Date d'inscription
samedi 16 novembre 2002
Statut
Membre
Dernière intervention
9 avril 2008
1
Chris, mon algorithme marche (j'avais testé comme toi au début mais les
chaines de caractères sont encadrés par des guillemets et séparées par
un espace), le nom du fichier est valide, la scene 3D se charge mais il
n'y a pas de texture.



Mais effectivement, le drag and drop met le répertoire par défaut à "C:\Document and Settings\UserName"

Si GetCurrentDirectory ne donne pas le répertoire de l'exe, comment récupérer le répertoire de l'exe ?



Merci
Messages postés
54
Date d'inscription
jeudi 20 novembre 2003
Statut
Membre
Dernière intervention
4 avril 2007

ok, récapitulation :

1- si double clic sur exe :

- GetCommandLine : "C:\DossierProg\ProgFile.exe" // avec guillemets

- GetCurrentDirectory : C:\DossierProg // sans guillemet et sans \ à la fin

2- si drag&drop d'un ou plusieurs fichiers (dossier possible) :

GetCommandLine : "C:\DossierProg\ProgFile.exe" C:\UnDossier\UnFichier.ext
// le 1er avec guillemets, pas le ou les suivants.
// ESP entre chaque.

GetCurrentDirectory : C:\Document and Settings\UserName

Dans tous les cas le 1er argument renvoyé par GetCommandLine est le nom et chemin du prog entre guillemets.
if(*lpszArgument) indique si il y a des arguments.

bye.
Messages postés
54
Date d'inscription
jeudi 20 novembre 2003
Statut
Membre
Dernière intervention
4 avril 2007

je reviens à la charge avec une nouvelle info,
en fait, il y des guillements mais uniquement si ESP dans le nom!!

drag&drop sans espace dans le nom :
GetCommandLine : "C:\DossierProg\ProgFile.exe" C:\UnDossier\UnFichier.ext
lpszArgument : C:\UnDossier\UnFichier.ext

drag&drop avec espace dans le nom :
GetCommandLine : "C:\DossierProg\ProgFile.exe" "C:\UnDossier\Un Fichier.ext"
lpszArgument : "C:\UnDossier\Un Fichier.ext"

drag&drop 2 fichiers,un avec espace et l'autre sans :
GetCommandLine : "C:\DossierProg\ProgFile.exe" C:\Autre.ext "C:\Un Fichier.ext"
lpszArgument : C:\Autre.ext "C:\UnDossier\Un Fichier.ext"

cette fois c'est bon ;)