J'ai créé une API dans une DLL (at_xpedite.dll) et les fonctions ne fonctionnent pas correctement lorsqu'elles sont appellées depuis mon programme de test alors qu'elles fonctionnent très bien si je les copie dans le code de mon prog de test.
--Code DLL--
-- Code Test --
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 [xip_fax.h] [...] #ifdef __cplusplus extern "C" { #endif AT_XPEDITE_API int XIP_FAX_WriteOutputMode(FILE* dest, char* mode); #ifdef __cplusplus }; #endif [...] [xip_fax.c] [...] int XIP_FAX_WriteOutputMode(FILE* dest, char* mode) { char toWrite[XIP_LINE_SIZE+1] = ""; unsigned int size = 0; size = sprintf(toWrite, "OUTPUTMODE %s", mode); if(fwrite(toWrite, 1, size, dest) != size) return XIP_ERROR; return XIP_SUCCESS; } [...]
J'ai droit à un beau "Unhandled exception in test.exe (NTDLL.DLL): xxx Access violation"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 int main(int argc, char* argv[]) { int ret = 0; FILE* xipFile ; if((xipFile = fopen("c:\\_temp_\\file.xip.txt", "wt")) == NULL) { return FAX_XPD_ERROR; } ret = XIP_FAX_WriteOutputMode(xipFile, "standard"); fclose(xipFile); }
En mode débug j'ai remarqué que les fonction de base ne fonctionnait même pas:
"unsigned int size = 0" ne m'initialize par la variable (en tout cas pas à 0)
"sprintf()" ne copie pas toujours la chaine demandé (toujours la même)
"strlen()" retourne des noombre abérrant (19 normalement)
D'où cela peut-il venir (je viens de rebooter au cas où !) ?
Partager