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

Galmiza Messages postés 573 Date d'inscription samedi 16 novembre 2002 Statut Membre Dernière intervention 9 avril 2008 - 23 oct. 2005 à 14:40
cs_chris91 Messages postés 54 Date d'inscription jeudi 20 novembre 2003 Statut Membre Dernière intervention 4 avril 2007 - 25 oct. 2005 à 21:37
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

Galmiza Messages postés 573 Date d'inscription samedi 16 novembre 2002 Statut Membre Dernière intervention 9 avril 2008 1
23 oct. 2005 à 14:47
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 ???
0
vangeurmasker Messages postés 99 Date d'inscription mercredi 12 mai 2004 Statut Membre Dernière intervention 29 mars 2006
23 oct. 2005 à 15:08
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.
0
Galmiza Messages postés 573 Date d'inscription samedi 16 novembre 2002 Statut Membre Dernière intervention 9 avril 2008 1
23 oct. 2005 à 16:05
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.
0
cs_chris91 Messages postés 54 Date d'inscription jeudi 20 novembre 2003 Statut Membre Dernière intervention 4 avril 2007
24 oct. 2005 à 17:10
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Galmiza Messages postés 573 Date d'inscription samedi 16 novembre 2002 Statut Membre Dernière intervention 9 avril 2008 1
24 oct. 2005 à 17:22
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
0
cs_chris91 Messages postés 54 Date d'inscription jeudi 20 novembre 2003 Statut Membre Dernière intervention 4 avril 2007
25 oct. 2005 à 17:03
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.
0
cs_chris91 Messages postés 54 Date d'inscription jeudi 20 novembre 2003 Statut Membre Dernière intervention 4 avril 2007
25 oct. 2005 à 21:37
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 ;)
0
Rejoignez-nous